我试图使用dept first search来解决水,壶问题(一个7L,一个4L,在7L水壶中得到5L)。但是每当我试图从我的一个动作中恢复一个新的状态时,就会出现问题。 Prolog Code
我无法弄清楚出了什么问题,这是跟踪后输出的样子: enter image description here
提前感谢您的帮助!
答案 0 :(得分:0)
您应该将代码复制并粘贴到您的问题中;我们无法从您的图片中复制和粘贴它,这会让您更有效地帮助您,从而减少我们提供帮助的可能性。
无论如何我注意到了一些问题:
go_to_goal/3
的第一条规则没有谈及ClosedList
和Path
之间的关系。您将计算路径,但永远无法将其传递给调用者。 (然后,你也忽略了Path
中的solve/0
...)如果你的Prolog系统给你"单例变量"警告,你永远不要忽视它们!==
运算符错误。目标State == (5, X)
表示最后您正在寻找第一个组件为5的对(此部分没问题),第二个组件是未绑定的变量。实际上,在计算之后,该对的第二个组件将绑定到某个算术项。这种比较总是会失败。您应该使用=
(统一)运算符。 ==
仅在特殊情况下很少使用。X+Y-7
这样的术语放入规则的头部,则不会将其评估为数字。如果您希望将其评估为数字,则必须在规则正文中使用is/2
。go_to_goal/3
的第二个条款尝试使用action/2
对作为第一个(0, 0)
论点。这总是失败,因为action/2
的每个子句的第一个参数都是术语state(X, Y)
。如果您将此更改为state(0, 0)
中的go_to_goal/3
,则应该可以取得一些进展。