0

我正在尝试使用部门优先搜索来解决水罐问题(一个 7L,一个 4L,在 7L 水罐中获得 5L)。但是,每当我尝试从我的一个操作中恢复新状态时,总会出现问题。 序言代码

我不知道出了什么问题,这是跟踪后的输出: 在此处输入图像描述

提前感谢您的帮助!

4

1 回答 1

0

您应该将代码复制并粘贴到您的问题中;我们无法从您的图像中复制和粘贴它,这使得它可以为您提供更多帮助,这反过来又降低了我们提供帮助的可能性。

无论如何我注意到了一些问题:

  • 您的第一条规则go_to_goal/3没有谈论 和 之间的ClosedList关系Path。您将计算路径,但永远无法将其传达给调用者。(再一次,你也忽略Pathsolve/0......)如果你的 Prolog 系统给你“单例变量”警告,你永远不应该忽略它们!
  • 您使用的==运算符错误。目标State == (5, X)指出,最后您要寻找第一个组件为 5(这部分很好)且第二个组件是未绑定变量的对。事实上,在您的计算之后,该对的第二个组件将绑定到某个算术项。这种比较总是会失败。您应该改用=(unification) 运算符。==仅在特定情况下很少使用。
  • 如果您将一个术语 likeX+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,您应该能够取得一些进展。
于 2016-11-28T19:19:03.700 回答