CLIPS 匹配模式的第一个字段

CLIPS match first field of a pattern

我正在尝试撤回所有形式的事实:

(<something> task-error)

为此,我编写了规则:

(defrule retract-task-error "retract task error"
         (declare (salience -1000))
         ?f <- (?n task-error)
         =>
         (retract ?f)
)

但它不起作用并出现错误:

[PRNTUTIL2] Syntax Error:  Check appropriate syntax for the first field of a pattern.

是否有可能使用 CLIPS 完成此任务,或者我是否需要重新安排代码以避免匹配第一个事实字段?

模式的第一个字段必须是符号。最简单的解决方案可能是在所有可能包含任务错误的事实和模式的开头添加一个公共符号(例如任务):

(defrule retract-task-error "retract task error"
         (declare (salience -1000))
         ?f <- (task ?n task-error)
         =>
         (retract ?f)
)