0

我有两个堆栈,一个目标和一个正在更改的堆栈。当我完成目标堆栈的每一步时,我会从中删除一个字段。我知道当堆栈现在为空时,我已经完成了一个特定的目标。我正在尝试编写一个规则来测试变量何时为空,但我不断收到错误消息:[EXPRNPSR1] A function name must be an symbol。这是我的规则。

(defrule done
   (declare (salience 30))
   ?stack <- (curr-stack $?thusfar)
   ?goal <- (goal-stack ?H)
   (test (= ?H ()))
=>
   (retract ?stack ?goal))

任何帮助表示赞赏!谢谢!

4

1 回答 1

0

$?foo是一个多字段变量(其中包含 0 个或多个内容)。 ?foo是单个字段变量(仅 1 个)。

因此,?foo就您对堆栈的指示而言,测试“空虚”对您没有多大帮助。

我的多字段变量中是否至少包含一件事?

(test (> (length $?foo) 0))

我的多字段变量是空的吗?

(test (= (length $?foo) 0))
于 2012-06-23T20:53:37.060 回答