我想定义一个关系del_all(X, L, L1)
,用于从列表X
中删除所有项L
(如果有)。
示例查询:
?- del_all(a, [a,b,a,c,d,a], L1).
L1 = [b, c, d]. % expected answer
答案 0 :(得分:2)
答案 1 :(得分:1)
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).
答案 2 :(得分:1)
根据某些给定标准对列表项进行分区是Prolog中常见的习语。
将meta-predicate tfilter/3
与dif/3
结合使用,我们可以简单地查询:
?- tfilter(dif(a), [a,b,a,c,d,a], L1). L1 = [b,c,d]. % expected result
答案 3 :(得分:0)
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).
这很简单。