Как вы разыменовываете слот в факте, соответствующем в LHS правила?Если переменная соответствует факту, я не могу найти, как создать дополнительные условия, которые соответствуют слотам в этом факте.
Например, в приведенном ниже коде я хочу напечатать некоторый текст, если есть факт вида "(do (action? Action))".Тем не менее, действие само по себе является фактом, и я хочу, чтобы правило срабатывало только в том случае, если в слоте «имя» этого факта есть «run».Как мне это сделать?
(deftemplate do
(slot action)
)
(deftemplate action
(slot name)
)
(defrule find-do ""
?do <- (do (action ?action))
(test (eq ?action.name "run")) ; This causes a syntax error.
=>
(printout t "doing " ?action crlf)
)
(deffacts startup (do (action (action (name "running")))))