繁体   English   中英

序言不是谓词调用中的唯一元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM