当前正在研究《七周内的七种语言》一书,并且一直坚持要运行第一个序言示例。这涉及相同的代码片为this question;不过我相信我的问题是完全不同的。
我在书中定义了likes
和friend
;我的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参数过程中引用?我在这里做错了什么? 真不敢相信这是在我的序言中的错误;?)
答案 0 :(得分:6)
关于Ubuntu上的GNU Prolog的这个问题(关于具有零的谓词的存在错误,当具有相同的谓词的一个或多个同名谓词存在时,在源代码中没有调用该错误)已有报道。该解决方案是下载GNU Prolog的来源和手动编译。