新手提问:在SWI-Prolog中关于否定的疑问
prolog吧
全部回复
仅看楼主
吧务
level 14
端点市 楼主
最近在看《七周七语言》,被Prolog的奇妙特性深深吸引。书中有这样一段代码:
likes(wallace, cheese).
likes(grommit, cheese).
likes(wendolene, sheep).
friend(X, Y) :- \+(X = Y), likes(X, Z), likes(Y, Z).
也就是说有相同兴趣的人会是同好、朋友,但为了避免生成的结果出现两者均为同一人,因此前面加入否定条件。
我使用的是SWI-Prolog,版本号为7.6.4。可是先前按照书中的代码编译后,结果为“false.”,后来我将否定条件放到后面,输出了需要的结果。这是为什么?
2018年06月08日 13点06分 1
level 13
光看7周7语言是不够的,找点专门讲Prolog的书吧。单说friend(X,Y),XY一开始都是自由变量,就是还没有绑定确定的值,这时X=Y永远为真,否定就是永远为假了。
2018年06月08日 14点06分 2
[大拇指]明白了,谢谢![玫瑰]去年期末在图书馆搜索引擎找Prolog的书,根据提供的位置找书时发现已被移库了。它的资料真的是太少了。[泪]终于在上周找到另一本书《用Prolog和Turbo Prolog语言开发专家系统》。Turbo Prolog使用not来表示否定,我原来以为这是方言间的语法优先级不同,\+会把后面的也一并否定了。[委屈]
2018年06月08日 14点06分
1