КЛИПЫ обнаружение фактов не работают

У меня в CLIPS (6.3) есть следующие deftemplates:

(deftemplate A ( slot a ) (slot b) )
(deftemplate forSearch (slot property)(slot value))

Мне нужно прочитать пару (property, value) из ввода, а затем найти факт A, значение которого в слоте property равно value.

Если я сделаю что-то вроде этого:

(defrule r2
(forSearch (property ?c)(value ?d))
(A (?c ?d))
=>
(printout t "debug" crlf)
)

Я получаю следующую ошибку:

[PRNTUTIL2] Syntax Error:  Check appropriate syntax for deftemplate patterns.

ERROR:
(defrule MAIN::r2
   (forSearch (property ?c) (value ?d))
   (A (?c

Что мне теперь делать?


person Milos    schedule 30.03.2013    source источник


Ответы (1)


Вы должны указать имя слота в части правила сопоставления с образцом.

Правильный синтаксис:

(defrule r2
     (forSearch (property ?c)(value ?d))
     (A (a ?c) (b ?d))
     =>
     (printout t "debug" crlf)
)

Я не понимаю, чего вы хотите достичь, и знаю, что уже поздно, но надеюсь, что это поможет.

person Alexandru Chirila    schedule 06.04.2013
comment
Похоже, что он хочет иметь возможность указать A слот для сопоставления с помощью forSearch deftemplate, чтобы не было необходимости в отдельных правилах для каждого слота. То есть ?c может указывать либо слот a, либо слот b. - person bogatron; 06.04.2013
comment
Я не думаю, что это возможно, согласно руководству CLIPS, подстановочный знак не может быть первым элементом в шаблоне. - person Alexandru Chirila; 07.04.2013