如何删除Prolog

时间:2016-05-19 17:48:55

标签: list prolog prolog-dif

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

示例查询:

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

4 个答案:

答案 0 :(得分:2)

以下是将umbraco.dll(=)/2组合在一起的另一个版本:

dif/2

它使用if_/3

答案 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中常见的习语。

tfilter/3dif/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).

这很简单。