Prolog不是谓词调用中唯一的元素
在Prolog脚本中,我定义了:Prolog不是谓词调用中唯一的元素,prolog,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) 这将修复它,但我不确定为什么…看起来您假设具有不同名称的变量不能具有相同的值。那不是真的。您必须显式地指定它(例如,在数学中,-变量X可以与
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).
您执行了母亲(X,Y)。
查询,结果将返回
1 ?- mother(X,Y).
X = maria,
Y = nick ;
X = maria,
Y = dario ;
X = irini,
Y = dewey.
所以你的结果就是有两个孩子的母亲(玛丽亚)
如果您只想要一位有两个孩子的母亲,您应该将您的母亲
查询修改为:
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没有找到更多结果)