Prolog实例化错误问题

时间:2014-06-13 18:40:45

标签: prolog

我在某些prolog代码中遇到了实例化错误。

uncaught exception: error(instantiation_error,(is)/2)

当谓词连接调用链接到(希望)生成链接到节点的子列表(称为Next)时,会发生错误。

我已经测试了链接,它似乎工作得很好,只有当它被调用时才能拥有它。我猜它与孩子有关'但我是prolog的新手,所以我不确定到底是什么。

我有第二个版本的链接,可以很好地处理连接,但实际上并不能自行工作。

这里有一些代码:

linked(loc(A, B), loc(C, D)) :- C is A+1, D is B+1.
linked(loc(A, B), loc(C, D)) :- C is A-1, D is B-1.
linked(loc(A, B), loc(C, D)) :- C is A, D is B-1.
linked(loc(A, B), loc(C, D)) :- C is A, D is B+1.
linked(loc(A, B), loc(C, D)) :- C is A-1, D is B.
linked(loc(A, B), loc(C, D)) :- C is A+1, D is B.

connects(State, End, Colour, Next, Close) :- linked(Child, Next)

该计划还有更多内容,但通过大量调试,我得出的结论是,这些界限是问题发生的地方。

更多信息: 连接是一个谓词,用于一个名为connected的谓词,用于确定是否存在相同元素的完整路径。 Linked是一个谓词,它可以确定两个节点是否彼此相邻(垂直,对角线,水平。但不是在方形网格中,而是认为是六边形)。

这里也是一个示例状态

    [e,e,b,e,e],
   [e,w,w,b,e],
  [b,w,b,w,w],
 [w,w,b,b,b],
[e,e,b,w,e]

1 个答案:

答案 0 :(得分:1)

错误是收益,因为is右侧有一个变量。

connects/5中您使用linked(Child,Next),但Child无处使用,因此始终未绑定。因此,在调用linked/2时,AB始终是导致错误的变量。

您的意思是linked(State,Next)吗?