未捕获的异常:error(existence_error(procedure,likes / 0),friend / 0)(七种语言)

时间:2019-02-02 18:52:51

标签: prolog gnu-prolog

当前正在研究《七周内的七种语言》一书,并且一直坚持要运行第一个序言示例。这涉及相同的代码片为this question;不过我相信我的问题是完全不同的。

我在书中定义了likesfriend;我的friends.pl:

likes(wallace, cheese).
likes(grommit, cheese).
likes(wendolene, sheep).

friend(X, Y) :- \+(X = Y), likes(X, Z), likes(Y, Z).

我使用GNU序言(v1.4.5,在Ubuntu 18.10),我可以加载friends.pl consultfile,无论是经由| ?- [friends.pl]| ?- ['friends.pl'],或通过调用gprolog以其{{1 }}参数:--consult-file就好

询问gprolog --consult-file friends.pl事实或likes规则的第一部分就可以了:

friend

但是,当我尝试一个涉及规则第二部分的查询时,我得到了:

| ?- likes(grommit, cheese).

yes
| ?- friend(grommit, grommit).

no

当我阅读错误消息时,它告诉我没有使用“ 0”参数的过程“喜欢”,对吗?但是,在我的治所在就是这样一个0参数过程中引用?我在这里做错了什么? 真不敢相信这是在我的序言中的错误;?)

1 个答案:

答案 0 :(得分:6)

关于Ubuntu上的GNU Prolog的这个问题(关于具有零的谓词的存在错误,当具有相同的谓词的一个或多个同名谓词存在时,在源代码中没有调用该错误)已有报道。该解决方案是下载GNU Prolog的来源和手动编译。