dept first search を使用して、水、ジャグの問題 (7L 1 つ、4L 1 つ、7L ジャグで 5L を取得) を解決しようとしています。ただし、アクションの 1 つから新しい状態を取り戻そうとするたびに、何かがうまくいかないことがあります。 プロローグコード
何が問題なのかわかりません。トレース後の出力は次のようになります。 ここに画像の説明を入力してください
助けてくれてありがとう!
dept first search を使用して、水、ジャグの問題 (7L 1 つ、4L 1 つ、7L ジャグで 5L を取得) を解決しようとしています。ただし、アクションの 1 つから新しい状態を取り戻そうとするたびに、何かがうまくいかないことがあります。 プロローグコード
何が問題なのかわかりません。トレース後の出力は次のようになります。 ここに画像の説明を入力してください
助けてくれてありがとう!
コードをコピーして質問に貼り付ける必要があります。私たちはあなたの画像からそれをコピーして貼り付けることはできません。
とにかく気づいたいくつかの問題:
go_to_goal/3
の関係については言及していません。パスを計算しますが、それを発信者に伝えることはできません。(また、... も無視します) Prolog システムが「シングルトン変数」の警告を出す場合、それらを無視してはいけません!ClosedList
Path
Path
solve/0
==
演算子の使い方が間違っています。目標State == (5, X)
は、最後に、最初のコンポーネントが 5 (この部分は問題ありません) であり、2 番目のコンポーネントがバインドされていない変数であるペアを探していることを示しています。実際、計算の後、ペアの 2 番目のコンポーネントは何らかの算術項にバインドされます。この比較は常に失敗します。=
代わりに (統合) 演算子を使用する必要があります。==
特定の状況でめったに使用されません。X+Y-7
と、数値に評価されません。is/2
数値に評価する場合は、ルールの本文で使用する必要があります。go_to_goal/3
) 。のすべての句の最初の引数がtermであるため、これは常に失敗します。これを に変更すると、少しは前進できるはずです。action/2
(0, 0)
action/2
state(X, Y)
state(0, 0)
go_to_goal/3