一个Prolog谓词结果
我已经编写了一个Prolog关系一个Prolog谓词结果,prolog,Prolog,我已经编写了一个Prolog关系remove(E,L,R),如果R是从列表L中删除E的一个实例而得到的列表,则该关系为真。如果E不是L的成员,则关系为false 我想知道以下查询的结果 remove(p(X),[a,p(a),p(p(a)),p(p(p(a)))],R). 那么?问问吧。不是我们,而是问序言。结果应该是 或者类似的东西,如果你写得对的话。如果您允许回溯(换句话说,从列表中删除一个元素,从第一个元素开始),您将得到如下结果 ?- remove(p(X),[a,p(a),p(p(a
remove(E,L,R)
,如果R
是从列表L
中删除E
的一个实例而得到的列表,则该关系为真。如果E
不是L
的成员,则关系为false
我想知道以下查询的结果
remove(p(X),[a,p(a),p(p(a)),p(p(p(a)))],R).
那么?问问吧。不是我们,而是问序言。结果应该是 或者类似的东西,如果你写得对的话。如果您允许回溯(换句话说,从列表中删除一个元素,从第一个元素开始),您将得到如下结果
?- remove(p(X),[a,p(a),p(p(a)),p(p(p(a)))],R).
X = a,
R = [a, p(p(a)), p(p(p(a)))] ;
X = p(a),
R = [a, p(a), p(p(p(a)))] ;
X = p(p(a)),
R = [a, p(a), p(p(a))] ;
false.
您到底有什么问题?在实现后,根据您处理变量统一的方式,您可能能够匹配并仅删除模式统一到的第一个元素。等效
remove(A,B,C):-选择(A,B,C)。
?
?- remove(p(X),[a,p(a),p(p(a)),p(p(p(a)))],R).
X = a,
R = [a, p(p(a)), p(p(p(a)))] ;
X = p(a),
R = [a, p(a), p(p(p(a)))] ;
X = p(p(a)),
R = [a, p(a), p(p(a))] ;
false.