【发布时间】:2014-06-13 18:40:45
【问题描述】:
我正在处理的一些 prolog 代码中出现实例化错误。
uncaught exception: error(instantiation_error,(is)/2)
当谓词 connect 链接到(希望)生成链接到节点(称为 Next)的子节点列表时,会发生错误。
我已经测试了链接,它似乎可以正常工作,只是当它被这样调用时。我猜这与“孩子”有关,但我是 prolog 的新手,所以我不确定到底是什么。
我有第二个版本的linked,它可以很好地与connects一起工作,但实际上并不能单独工作。
这里是一些代码:
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)
该程序还有更多内容,但通过大量调试,我得出的结论是这些行是问题所在。
更多信息: Connects 是一个谓词,用于名为 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]
【问题讨论】:
标签: prolog