[英]Prolog not unique elements in predicate call
在我的Prolog脚本中,我定义了:
mother(X,Y) :-
parent_of(X,Y),
female(X).
然后,我想知道是否有母亲有两个以上的孩子,所以我跑步:
mother(X,Y), mother(X,Z)
结果:
X = pam,
Y = M, M = bob
这让我很困惑。...我想如果我加上
not(Y = Z)
这样可以解决它,但是不确定为什么...
似乎您假设具有不同名称的变量不能具有相同的值。 这不是真的。 您必须明确指定它(例如,在数学中,-变量X可以具有与其他变量Y相同的值,除非您明确指定相反的意思)。
如果执行类似的查询
mother(X,Y).
结果将带回有两个孩子的母亲。
因此,如果您的数据库类似于
female(maria).
female(irini).
parent_of(maria,nick).
parent_of(maria,dario).
parent_of(irini,dewey).
然后您执行了mother(X,Y).
查询,结果将带回
1 ?- mother(X,Y).
X = maria,
Y = nick ;
X = maria,
Y = dario ;
X = irini,
Y = dewey.
因此,您的结果将是有两个孩子的母亲(玛丽亚)。
如果只希望有两个孩子的母亲,则应将mother
查询修改为:
mother(X,Y) :-
parent_of(X,Y),
parent_of(X,M),
Y \= M,
female(X).
该查询的结果将是:
3 ?- mother(X,Y).
X = maria,
Y = nick ;
X = maria,
Y = dario ;
false.
( false表示Prolog找不到更多结果)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.