在我的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)
这会解决它,但我不确定为什么......
答案 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没有找到更多结果)。