0

目標と変更するスタックの2つのスタックがあります。ゴールスタックの各ステップを実行するときに、フィールドを削除します。そのスタックが空になったときに、特定の目標を達成したことを私は知っています。変数が空の場合にテストするルールを作成しようとしていますが、エラーが発生し続けます:[EXPRNPSR1]関数名はシンボルである必要があります。これが私のルールです。

(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しても、スタックについて示した限りではあまり効果がありません。

私のマルチフィールド変数には少なくとも 1 つのものが含まれていますか?

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

私のマルチフィールド変数は空ですか?

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