(蛇足) can_unify/2を使って、定義3のremoveを定義1,2とよく似た形で定義する。

元:「remove 述語の定義―リスト[a:1, a:2]から「a:_」をすべて取り除いた結果は?」(http://codetter.com/?p=1077)
特にメリットはない。

元:「remove 述語の定義―リスト[a:1, a:2]から「a:_」をすべて取り除いた結果は?」(http://codetter.com/?p=1077)
特にメリットはない。

  • タグ:
  • タグはありません
% can_unify/2
% can_unify(X, Y) X = Y
can_unify(X, Y) :-
setof(Z, (Z = X, X = Y), [_|_]).
?- can_unify(a:_, a:1).
?- \+ can_unify(b:_, a:_).
remove(_, [], []).
remove(E, [H|Src], Dst ) :- can_unify(E, H), !, remove(E, Src, Dst).
remove(E, [H|Src], [H|Dst]) :- remove(E, Src, Dst).
?- remove(a:_, [a:1, a:1, a:2, b:2], [b:2]).
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX