2016-11-28 105 views
0

我試圖解決一個水,水罐問題(一個7L,一個4L,在7L水罐中獲得5L)使用部門首次搜索。然而,每當我嘗試從我的一個行爲中獲得新的狀態時,事情就會一直出錯。 Prolog Code深度優先搜索序言

我想不出什麼錯誤,這是輸出的樣子跟蹤後: enter image description here

在此先感謝您的幫助!

回答

0

您應該將您的代碼複製並粘貼到您的問題中;我們無法從您的圖片中複製和粘貼圖片,這使得它更多的工作來幫助您,從而使我們不太可能提供幫助。

一些問題,我注意到反正:

  • go_to_goal/3你的第一個規則不談論ClosedListPath之間的關係。您將計算路徑,但永遠無法將其傳遞給調用者。 (然後,你也忽略Pathsolve/0 ...)如果你的Prolog系統給你「單變量」警告,你永遠不應該忽略它們!
  • 您正在使用==運算符錯誤。 State == (5, X)這個目標表明最後你需要找一個第一個元素是5的元素(這個部分是好的),第二個元素是一個未綁定的變量。事實上,在你的計算之後,這個對的第二個成分將被綁定到一些算術術語。這種比較總是會失敗。您應該使用=(統一)運營商。 ==僅在極少情況下才使用,特別是在特定情況下。
  • 如果你把一個像X+Y-7這樣的術語放到規則的頭部,它將不會被評估爲一個數字。如果您希望將其評估爲數字,則必須在規則正文中使用is/2
  • 但是,您最直接的問題如下(從您發佈的跟蹤中可見):go_to_goal/3的第二個子句嘗試使用一對(0, 0)作爲第一個參數調用action/2。這總是失敗,因爲action/2的每個子句的第一個參數是一個術語state(X, Y)。如果您在go_to_goal/3中將此更改爲state(0, 0),則應該能夠取得一些進展。