目前正在阅读《七周内的七种语言》一书,并且坚持要运行第一个序言示例。这涉及与 this question 相同的代码段;但是我相信我的问题是完全不同的。
我已经定义了 likes
和 friend
就像书中一样;我的 friend 们.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 咨询文件。或 | ?- ['friends.pl']
或者用它的 --consult-file
调用 gprolog参数: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 或更大值的谓词时,源代码中未调用具有 arity 0 的谓词的存在错误)。解决方案是下载 GNU Prolog 源代码并手动编译。
关于prolog - 未捕获异常 : error(existence_error(procedure, likes/0),friend/0)(七种语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54496409/