2

thisと同様に、リスト上の要素のすべての出現を削除したいのですが、私の場合、リストにはインスタンス化されていない変数が含まれている可能性があります。例えば:

delMember(z, [A,B,A,z], L).
L = [A, B, A];
false.

delMember(A, [A, B, A, z], L).
L = [B,z];
false.

delMember を次のように定義してみました。

delMember(_, [], []).
delMember(X, [X|Xs], Y) :- delMember(X, Xs, Y).
delMember(X, [T|Xs], [T|Y]) :- X \== T, delMember(X, Xs, Y).

この定義では、私が得た最後の結果は正しいですが、その前に変数をインスタンス化しようとしています。

?- delMember(A, [A,B,A,z], R).
A = B, B = z,
R = [] ;
A = B,
R = [z] ;
A = z,
R = [B] ;
R = [B, z] ;

何か案は???

4

1 に答える 1