我正在尝试在 Prolog 中实现一些用于列表操作的谓词。一切都按预期工作。例如
append([],Ys,Ys).
append([X|Xs],Ys,[X|Zs]) :- append(Xs,Ys,Zs).
示例查询:
?- append([1,2,3],[4,5,6],X).
X = [1,2,3,4,5,6]. % OK
但是我在使用“删除”谓词时遇到了麻烦。以下是它的实现方式:
delete(X,[Y|Ys],Zs) :- X == Y, delete(X,Ys,Zs).
delete(X,[_X|Ys],[_Z|Zs]) :- delete(X,Ys,Zs).
delete(_X,[],[]).
结果错误的示例查询:
?- delete(4,[1,2,3,4],X).
X = [_G8975, _G8978, _G8981]. % BAD
我已经用进一步的输入对其进行了测试,它总是返回一个预期长度的列表,所以它以某种方式工作。但是为什么我只得到那些神秘的 _GXXXX 而不是数字呢?
提前谢谢了!