我是Prolog的初学者,我有一个简单的问题。我写了一个sister_of/2
谓词,如下所示:
sister_of(X, Y) :-
female(X),
parents(X, Z, W) == parents(Y,Z,W),
X \= Y.
我读到这个,因为X是Y的姐妹,如果X是女性,X的父母是Z W,Y的父母,Z W和X和Y不是同一个人。这不是出于某种原因运行,所以它必须是一个语法问题,一些洞察力将是太棒了。谢谢。
答案 0 :(得分:2)
Prolog不是功能性语言,它是关系语言。您定义谓词(即关系),而不是函数。因此,您的parents(X, Z, W) == parents(Y,Z,W)
只是比较两个术语parents(X, Z, W)
和parents(Y,Z,W)
的相等性。假设还定义了parents/3
谓词,您需要以下内容:
sister_of(X, Y) :-
female(X),
parents(X, Z, W),
parents(Y, Z, W),
X \= Y.
答案 1 :(得分:1)
嗯,你开始构建推理好了,但在比较中失败了。这是你错过的:
sister_of(X, Y) :-
female(X),
parents(X, Z, W),
parents(Y, Z, W),
X \= Y.
现在的推理如下:
X
是Y
; X
是女性; X
有父母Z
和W
; Y
有父母Z
和W
; X
不是Y
,因此X
不是自己的姐妹。请注意,您之前执行的比较不是必需的(事实上,并不代表您的预期),因为Z
和W
仅限于{{1}的父母在步骤3中,这意味着X
和Z
在步骤3之后已经有了一个确定的值 - 换句话说,它们是绑定的。
之后,在第4步中,W
只能假定Y
的相同值,或者使X
为真的其他值。最后,删除步骤5中parents(Y, Z, W)
的案例,为您提供X == Y
的有效定义。