2015-09-24 3 views
0
(deffunction up() 
    ?fact <- u 
    (retract ?fact) 
    (assert (u green)) 

) 

Я пытаюсь заставить что-то подобное работать, функцию, чтобы изменить состояния фактов, но с этим это дает мне ошибку вроде? Факт не определен. Но я сделал это в дебюте. Почему это не работает?Как получить индекс фактов в клипах в deffunction?

ответ

1

Функции получают вход через их параметры. Правила получают ввод через их шаблоны. Если вы хотите, чтобы соответствовать шаблону, используйте правило:

(defrule up 
    ?fact <- (u) 
    => 
    (retract ?fact) 
    (assert (u green))) 

В качестве альтернативы, если вам нужно перебрать существующий набор фактов для deftemplate, вы можете использовать тот факт, набор функций запроса (делать-в-самом деле, сделать -for-all-Facts, ...):

(deffunction up() 
    (do-for-fact ((?fact u)) TRUE 
     (retract ?fact)) 
    (assert (u green)))