您如何取消引用规则 LHS 中匹配的事实中的插槽?如果变量与事实匹配,我找不到如何创建与该事实中的插槽匹配的进一步条件。
例如,在下面的代码中,如果存在“(do(action ?action))”形式的事实,我想打印一些文本。但是, ?action 本身就是一个事实,我只希望规则在该事实的“名称”槽是“运行”时触发。我将如何做到这一点?
(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")))))