深度优先搜索序言

Depth First Search Prolog

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

我不知道出了什么问题,这是跟踪后的输出: enter image description here

在此先感谢您的帮助!

您应该将代码复制并粘贴到您的问题中;我们无法从您的图片中复制和粘贴它,这会增加为您提供帮助的工作量,进而降低我们提供帮助的可能性。

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

  • 你的 go_to_goal/3 的第一条规则没有讨论 ClosedListPath 之间的关系。您将计算路径,但永远无法将其传达给调用者。 (话又说回来,你也忽略了 solve/0 中的 Path...)如果你的 Prolog 系统给你 "singleton variable" 警告,你永远不应该忽略它们!
  • 您使用的 == 运算符有误。目标 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),应该可以进步一点点。