我想定义一个关系del_all(X, L, L1)
,用于从 list 中删除所有项目X
(如果有)L
。
示例查询:
?- del_all(a, [a,b,a,c,d,a], L1).
L1 = [b, c, d]. % expected answer
我想定义一个关系del_all(X, L, L1)
,用于从 list 中删除所有项目X
(如果有)L
。
示例查询:
?- del_all(a, [a,b,a,c,d,a], L1).
L1 = [b, c, d]. % expected answer
这是另一个结合了(=)/2
and的版本dif/2
:
list_without([], _, []).
list_without([X|Xs], H, Ys0) :-
if_(X = H, Ys0 = Ys, Ys0 = [H|Ys]),
list_without(Xs, H, Ys).
它用if_/3
dele_all(X, [], []).
dele_all(X, [H|T], R) :-
H = X,
dele_all(X, T, R).
dele_all(X, [H|T], [H|R]) :-
dif(H, X),
dele_all(X, T, R).
del_all(_,[],[]).
del_all(Item,[Item|Rest],RRest) :-
!,
del_all(Item,Rest,RRest).
del_all(Item,[OtherItem|Rest],[OtherItem|RRest]) :-
del_all(Item,Rest,RRest).
就那么简单。