【问题标题】:Depth First Search Prolog深度优先搜索序言
【发布时间】:2016-12-01 01:00:13
【问题描述】:

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

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

提前感谢您的帮助!

【问题讨论】:

    标签: prolog depth-first-search water-jug-problem


    【解决方案1】:

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

    我还是注意到了一些问题:

    • go_to_goal/3 的第一条规则没有讨论ClosedListPath 之间的关系。您将计算路径,但永远无法将其传达给调用者。 (再一次,你也忽略了Path in 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),应该能有一点进步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 2022-07-27
      相关资源
      最近更新 更多