2016-11-28 9 views
0

私は水分、ジャグの問題(1L 7L、1L 4L、7L瓶の5Lを得る)をdept first searchを使って解決しようとしています。しかし、私が自分の行動の一つから新しい状態を取り戻そうとすると、何かがうまくいかない。 Prolog Code奥行き最初の検索プロローグ

私が間違って何が起こっているかを把握することはできません、これは出力がトレース後に次のようになります。すべての助けを事前に enter image description here

ありがとう!

答えて

0

コードをコピーして質問に貼り付ける必要があります。イメージからコピー&ペーストすることはできません。これはあなたの手助けをしてくれます。

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

  • go_to_goal/3のためのあなたの最初のルールはClosedListPathとの関係について話しません。あなたはパスを計算しますが、それを発信者に伝えることはできません。 (また、Pathsolve/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/3state(0, 0)に変更すると、少し進歩するはずです。
関連する問題