コードをコピーして質問に貼り付ける必要があります。イメージからコピー&ペーストすることはできません。これはあなたの手助けをしてくれます。
私はとにかく気づいたいくつかの問題:
go_to_goal/3
のためのあなたの最初のルールはClosedList
とPath
との関係について話しません。あなたはパスを計算しますが、それを発信者に伝えることはできません。 (また、Path
をsolve/0
で無視してください...)もしあなたのPrologシステムがあなたに "シングルトン変数"警告を与えたら、無視してはいけません!
==
演算子を間違って使用しています。目標State == (5, X)
は、最後に、最初のコンポーネントが5(この部分は正常)で、2番目のコンポーネントはバインドされていない変数であるペアを探していると述べています。実際には、計算の後、ペアの2番目のコンポーネントはいくつかの算術項にバインドされます。この比較は常に失敗します。代わりに=
(統一)演算子を使用する必要があります。 ==
は、まれにしか使用されません。
X+Y-7
のような用語をルールの先頭に入れると、それは数値に評価されません。数字を評価する場合は、規則の本文にis/2
を使用する必要があります。
- しかし、最も直面する問題は次のとおりです(投稿したトレースから確認できます)。
go_to_goal/3
の2番目の句は、(0, 0)
を最初の引数としてaction/2
を呼び出しようとします。 action/2
の各節の最初の引数が用語state(X, Y)
であるため、これは常に失敗します。これをgo_to_goal/3
のstate(0, 0)
に変更すると、少し進歩するはずです。