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」述語に問題があります。実装方法は次のとおりです。
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 しか得られないのでしょうか?
よろしくお願いします!