0
我試圖解決一個水,水罐問題(一個7L,一個4L,在7L水罐中獲得5L)使用部門首次搜索。然而,每當我嘗試從我的一個行爲中獲得新的狀態時,事情就會一直出錯。 Prolog Code深度優先搜索序言
我想不出什麼錯誤,這是輸出的樣子跟蹤後: enter image description here
在此先感謝您的幫助!
我試圖解決一個水,水罐問題(一個7L,一個4L,在7L水罐中獲得5L)使用部門首次搜索。然而,每當我嘗試從我的一個行爲中獲得新的狀態時,事情就會一直出錯。 Prolog Code深度優先搜索序言
我想不出什麼錯誤,這是輸出的樣子跟蹤後: enter image description here
在此先感謝您的幫助!
您應該將您的代碼複製並粘貼到您的問題中;我們無法從您的圖片中複製和粘貼圖片,這使得它更多的工作來幫助您,從而使我們不太可能提供幫助。
一些問題,我注意到反正:
go_to_goal/3
你的第一個規則不談論ClosedList
和Path
之間的關係。您將計算路徑,但永遠無法將其傳遞給調用者。 (然後,你也忽略Path
在solve/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)
,則應該能夠取得一些進展。