0

dept first search を使用して、水、ジャグの問題 (7L 1 つ、4L 1 つ、7L ジャグで 5L を取得) を解決しようとしています。ただし、アクションの 1 つから新しい状態を取り戻そうとするたびに、何かがうまくいかないことがあります。 プロローグコード

何が問題なのかわかりません。トレース後の出力は次のようになります。 ここに画像の説明を入力してください

助けてくれてありがとう!

4

1 に答える 1

0

コードをコピーして質問に貼り付ける必要があります。私たちはあなたの画像からそれをコピーして貼り付けることはできません。

とにかく気づいたいくつかの問題:

  • の最初のルールは、とgo_to_goal/3の関係については言及していません。パスを計算しますが、それを発信者に伝えることはできません。(また、... も無視します) Prolog システムが「シングルトン変数」の警告を出す場合、それらを無視してはいけません!ClosedListPathPathsolve/0
  • ==演算子の使い方が間違っています。目標State == (5, X)は、最後に、最初のコンポーネントが 5 (この部分は問題ありません) であり、2 番目のコンポーネントがバインドされていない変数であるペアを探していることを示しています。実際、計算の後、ペアの 2 番目のコンポーネントは何らかの算術項にバインドされます。この比較は常に失敗します。=代わりに (統合) 演算子を使用する必要があります。==特定の状況でめったに使用されません。
  • ルールの先頭に次のような用語を入れるX+Y-7と、数値に評価されません。is/2数値に評価する場合は、ルールの本文で使用する必要があります。
  • ただし、最も差し迫った問題は次のとおりです (投稿したトレースから確認できますgo_to_goal/3) 。のすべての句の最初の引数がtermであるため、これは常に失敗します。これを に変更すると、少しは前進できるはずです。action/2(0, 0)action/2state(X, Y)state(0, 0)go_to_goal/3
于 2016-11-28T19:19:03.700 に答える