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

时间:2014-05-30 00:26:29

标签: prolog

在我的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)

这会解决它,但我不确定为什么......

2 个答案:

答案 0 :(得分:1)

看起来您假设具有不同名称的变量不能具有相同的值。这不是真的。您必须明确指定它(例如,在数学中, - 变量X可以与不同的变量Y具有相同的值,除非您明确指定相反的值)。

答案 1 :(得分:1)

如果执行类似

的查询
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没有找到更多结果)。