【发布时间】:2012-10-06 11:34:22
【问题描述】:
我正在尝试查看以下事实的可能情况。
don likes cain
bob does not like don
cain does not like aron
nobody likes someone who does not like him
aron likes everyone who likes bob
don likes everyone bob likes
everybody likes somebody
我刚刚开始学习 prolog,我正在尝试在 prolog 中实现这一点,看看会出现多少种可能的情况。我在这里浏览了几个序言线程,我也在使用这本书 "Learn prolog now" 。所以这是我想出代码的最佳尝试。
likes(don, cain).
likes(aron,W):- likes(W,bob).
likes(don,M):- likes(bob,M).
(likes(aron,aron);likes(aron,bob));(likes(aron,cain);likes(aron,don)).
(likes(bob,aron);likes(bob,bob));(likes(bob,cain);likes(bob,don)).
(likes(cain,aron);likes(cain,bob));(likes(cain,cain);likes(cain,don)).
(likes(don,aron);likes(don,bob));(likes(don,cain);likes(don,don)).
not(likes(bob,don)).
not(likes(cain,aron)).
not(likes(Y,X)) :- not(likes(X,Y)).
当我在 Ubuntu Linux 的 swipl 编译器(在 winxp 中的 VirtualBox 中)运行它时,出现以下错误
?- [test].
ERROR: /home/test.pl:11:
'$record_clause'/2: No permission to modify static_procedure `(;)/2'
ERROR: /home/test.pl:13:
'$record_clause'/2: No permission to modify static_procedure `(;)/2'
ERROR: /home/test.pl:15:
'$record_clause'/2: No permission to modify static_procedure `(;)/2'
ERROR: /home/test.pl:17:
'$record_clause'/2: No permission to modify static_procedure `(;)/2'
% test compiled 0.00 sec, 1,616 bytes
true.
那么你能帮我解决这个问题吗……我这里用了not作为谓词,网上的一些帖子似乎提到了它。
【问题讨论】:
标签: prolog