【问题标题】:Prolog Instantiation Error IssueProlog 实例化错误问题
【发布时间】: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


    【解决方案1】:

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

    connects/5 中,您使用linked(Child,Next),但Child 没有在其他地方使用,因此始终未绑定。因此,当调用 linked/2 时,AB 始终是导致错误的变量。

    你的意思是linked(State,Next)

    【讨论】:

    • 嘿,非常感谢!虽然你的回答并没有真正解决我的问题,但它让我在思考方面走上了正确的道路。我刚刚将其更改为“linked(Next, Child)”,现在它可以工作了! :D ...进入下一个问题 :P
    猜你喜欢
    • 2013-10-15
    • 2011-09-05
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多