我在某些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]
答案 0 :(得分:1)
错误是收益,因为is
右侧有一个变量。
在connects/5
中您使用linked(Child,Next)
,但Child
无处使用,因此始终未绑定。因此,在调用linked/2
时,A
和B
始终是导致错误的变量。
您的意思是linked(State,Next)
吗?