我正在尝试使用部门优先搜索来解决水罐问题(一个 7L,一个 4L,在 7L 水罐中获得 5L)。但是,每当我尝试从我的一个操作中恢复新状态时,总会出现问题。 序言代码
我不知道出了什么问题,这是跟踪后的输出: 在此处输入图像描述
提前感谢您的帮助!
您应该将代码复制并粘贴到您的问题中;我们无法从您的图像中复制和粘贴它,这使得它可以为您提供更多帮助,这反过来又降低了我们提供帮助的可能性。
无论如何我注意到了一些问题:
go_to_goal/3
没有谈论 和 之间的ClosedList
关系Path
。您将计算路径,但永远无法将其传达给调用者。(再一次,你也忽略Path
了solve/0
......)如果你的 Prolog 系统给你“单例变量”警告,你永远不应该忽略它们!==
运算符错误。目标State == (5, X)
指出,最后您要寻找第一个组件为 5(这部分很好)且第二个组件是未绑定变量的对。事实上,在您的计算之后,该对的第二个组件将绑定到某个算术项。这种比较总是会失败。您应该改用=
(unification) 运算符。==
仅在特定情况下很少使用。X+Y-7
放入规则的头部,它将不会被评估为一个数字。如果您希望将其评估为数字,则必须is/2
在规则正文中使用。go_to_goal/3
尝试action/2
使用一对(0, 0)
作为第一个参数进行调用。这总是失败,因为每个子句的第一个参数action/2
是一个 term state(X, Y)
。如果将其更改为state(0, 0)
in go_to_goal/3
,您应该能够取得一些进展。