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)
,则应该能够取得一些进展。