Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/prolog/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/intellij-idea/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog不是谓词调用中唯一的元素_Prolog - Fatal编程技术网

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可以与

在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).
您执行了
母亲(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没有找到更多结果)