2016-11-28 168 views
0

我试图解决一个水,水罐问题(一个7L,一个4L,在7L水罐中获得5L)使用部门首次搜索。然而,每当我尝试从我的一个行为中获得新的状态时,事情就会一直出错。 Prolog Code深度优先搜索序言

我想不出什么错误,这是输出的样子跟踪后: enter image description here

在此先感谢您的帮助!

回答

0

您应该将您的代码复制并粘贴到您的问题中;我们无法从您的图片中复制和粘贴图片,这使得它更多的工作来帮助您,从而使我们不太可能提供帮助。

一些问题,我注意到反正:

  • go_to_goal/3你的第一个规则不谈论ClosedListPath之间的关系。您将计算路径,但永远无法将其传递给调用者。 (然后,你也忽略Pathsolve/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),则应该能够取得一些进展。