深度优先搜索序言
Depth First Search Prolog
我正在尝试使用部门优先搜索解决水罐问题(一个 7 升,一个 4 升,在 7 升罐中得到 5 升)。但是,每当我尝试从我的某个操作中恢复新状态时,总会出现问题。
Prolog Code
我不知道出了什么问题,这是跟踪后的输出:
enter image description here
在此先感谢您的帮助!
您应该将代码复制并粘贴到您的问题中;我们无法从您的图片中复制和粘贴它,这会增加为您提供帮助的工作量,进而降低我们提供帮助的可能性。
无论如何我注意到的一些问题:
- 你的
go_to_goal/3
的第一条规则没有讨论 ClosedList
和 Path
之间的关系。您将计算路径,但永远无法将其传达给调用者。 (话又说回来,你也忽略了 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)
,应该可以进步一点点。
我正在尝试使用部门优先搜索解决水罐问题(一个 7 升,一个 4 升,在 7 升罐中得到 5 升)。但是,每当我尝试从我的某个操作中恢复新状态时,总会出现问题。 Prolog Code
我不知道出了什么问题,这是跟踪后的输出: enter image description here
在此先感谢您的帮助!
您应该将代码复制并粘贴到您的问题中;我们无法从您的图片中复制和粘贴它,这会增加为您提供帮助的工作量,进而降低我们提供帮助的可能性。
无论如何我注意到的一些问题:
- 你的
go_to_goal/3
的第一条规则没有讨论ClosedList
和Path
之间的关系。您将计算路径,但永远无法将其传达给调用者。 (话又说回来,你也忽略了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)
,应该可以进步一点点。