未捕获的异常:错误(existence_error(过程,喜欢/0),朋友/0)(七种语言)



目前正在阅读《七周七种语言》一书,并且坚持要运行第一个prolog示例。这与这个问题涉及相同的代码片段;但是我相信我的问题完全不同。

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

likes(wallace, cheese).
likes(grommit, cheese).
likes(wendolene, sheep).
friend(X, Y) :- +(X = Y), likes(X, Z), likes(Y, Z).

我正在使用 gnu prolog(v1.4.5,在 Ubuntu 18.10 上),我可以通过 | ?- [friends.pl]| ?- ['friends.pl'] 或使用其--consult-file参数调用 gprolog 来加载 friends.pl 咨询文件: gprolog --consult-file friends.pl很好

询问likes事实或friend规则的第一部分就可以了:

| ?- likes(grommit, cheese).
yes
| ?- friend(grommit, grommit).
no

但是,当我尝试与规则第二部分有关的查询时,我得到:

| ?- friend(grommit, wendolene).
uncaught exception: error(existence_error(procedure,likes/0),friend/0)

当我阅读错误消息时,它告诉我没有过程"喜欢"需要 0 个参数,对吧?但是在我的规则中哪里引用了这样的 0 参数过程?我在这里做错了什么?不敢相信这是我的序言;)中的错误?

Ubuntu 上的 GNU Prolog 中,已经有几份关于此问题的报告(当存在具有相同名称的谓词且 arity 为 1 或更大时,源代码中未调用的谓词存在错误)。解决方案是下载GNU Prolog源代码并手动编译。

最新更新