Prolog - 只减去每个项目一次

时间:2011-12-07 16:15:27

标签: list prolog duplicates subtraction

当我使用prolog的内置谓词“减去/ 3”时:减去(+ Set,+ Delete,-Result)例如:

subtract([a,b,c,d,c,c,d,e], [c,a], X).  
X = [b, d, d, e].  

但我想在+设置ONCE中删除+删除中的每个项目。我的意思是,我想要

subtract([a,b,c,d,c,c,d,e], [c,a], X). to give
X = [b, d, c, c, d, e].

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以构建自己的程序来实现这一目标。 例如:

subtract_once(List, [], List).
subtract_once(List, [Item|Delete], Result):-
  (select(Item, List, NList)->
    subtract_once(NList, Delete, Result);
    (List\=[],subtract_once(List, Delete, Result))).

在每次迭代中,您从要删除的项目列表中取一个项目,并从输入列表中提取一个元素,然后继续使用两个列表的其余部分。

答案 1 :(得分:2)

你可以按照以下方式做点什么:

subtract_custom(Remainder, [], Remainder).
subtract_custom(List, [Current|Delete], X) :-
    select(Current, List, Rest),
    subtract_custom(Rest, Delete, X).

如果您希望删除失败时失败。否则你必须适应它。