带有语句语法的基本prolog问题
我是一个初学者,我有一个快速的问题。我写了一个/2的姐妹谓词,如下所示:带有语句语法的基本prolog问题,prolog,Prolog,我是一个初学者,我有一个快速的问题。我写了一个/2的姐妹谓词,如下所示: sister_of(X, Y) :- female(X), parents(X, Z, W) == parents(Y,Z,W), X \= Y. 我读这篇文章是因为X是Y的姐妹,如果X是女性,X的父母是Z,Z,W,X和Y不是同一个人。不过,由于某种原因,它没有运行,所以它一定是一个语法问题,一些见解将是非常棒的。多谢各位 Prolog不是函数式语言,它是一种关系语言。您定义的是谓词(即关系),而
sister_of(X, Y) :-
female(X),
parents(X, Z, W) == parents(Y,Z,W),
X \= Y.
我读这篇文章是因为X是Y的姐妹,如果X是女性,X的父母是Z,Z,W,X和Y不是同一个人。不过,由于某种原因,它没有运行,所以它一定是一个语法问题,一些见解将是非常棒的。多谢各位 Prolog不是函数式语言,它是一种关系语言。您定义的是谓词(即关系),而不是函数。因此,您的父母(X,Z,W)=父母(Y,Z,W)
只是比较了两个术语,父母(X,Z,W)
和父母(Y,Z,W)
是否相等。假设还定义了一个parents/3
谓词,则需要如下内容:
sister_of(X, Y) :-
female(X),
parents(X, Z, W),
parents(Y, Z, W),
X \= Y.
好吧,你开始构建推理,但在比较过程中失败了。以下是您错过的内容:
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
被限制为X
的父级。这意味着,Z
和W
在步骤3之后已经有了一个确定的值——换句话说,它们是绑定的
之后,在步骤4中,Y
只能假定相同的值X
,或使父项(Y,Z,W)
为真的某个其他值。最后,在步骤5中删除X==Y
的情况,这为(X,Y)的姐妹给出了一个有效的定义