-1

我想定义一个关系del_all(X, L, L1),用于从 list 中删除所有项目X(如果有)L

示例查询:

?- del_all(a, [a,b,a,c,d,a], L1).
L1 = [b, c, d].                           % expected answer
4

4 回答 4

2

这是另一个结合了(=)/2and的版本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

于 2016-05-20T07:15:41.977 回答
1

根据某些给定的标准对列表项进行分区是 Prolog 中的一个常见习惯用法。

结合使用 我们可以简单地查询:tfilter/3dif/3

?- tfilter ( dif (a), [a,b,a,c,d,a], L1)。
L1 = [b,c,d]。% 预期结果
于 2016-05-22T12:33:30.563 回答
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).
于 2016-05-19T18:35:48.647 回答
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).

就那么简单。

于 2016-05-26T09:42:36.743 回答