Вопрос

Как вы тестируете на факт существования в RHS правил в Клипы? Я пытаюсь разработать правило, которое «забил» текущее состояние, подсчитав, сколько фактов фактов существует. Очевидно, как проверить факты в ЛГС, но я не могу найти, как сделать эквивалент в RH.

Я хочу сделать что-то вроде этого, хотя это не допустимые клипы код:

(defrule score-state ""
    ?score <- (score (value ?value))
    =>
    (modify ?score (value (+ (exists (goal-1)) (exists (goal-2)) (exists (goal-3))))))

Так что, если ни одно из государств ворот не существует, то существует факт (оценка (значение 0)). И наоборот, если все состояния ворот существовали, то существует тот факт (оценка (значение 3)).

Справочное руководство упоминает функциональный факт-навык, но это, кажется, требуется, что он прошел адрес факта. Я пытался использовать его как (факт-навык (цель - 1)), но клипы дают мне синтаксическую ошибку.

Это было полезно?

Решение

(deftemplate score
   (slot value))

(deftemplate goal-1)

(deftemplate goal-2)

(deftemplate goal-3)

(deffacts start
   (score (value undefined))
   (goal-1)
   (goal-3))

(deffunction ecount (?g)
   (if (any-factp ((?f ?g)) TRUE)
      then (return 1)
      else (return 0)))

(defrule score-state ""
    ?score <- (score (value undefined))
    =>
    (modify ?score (value (+ (ecount goal-1) (ecount goal-2) (ecount goal-3)))))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top