【发布时间】:2020-04-23 20:54:38
【问题描述】:
我正在尝试创建一个谓词,该谓词从列表中删除重复项,同时保持其相对顺序。例如,[1,2,2,3,4,5,5,2] 的列表应返回 [1,2,3,4,5]。但是,我的代码只能删除连续的重复项,例如,不能删除最后的 2。
remove_duplicates([],[]).
remove_duplicates([H],[H]).
remove_duplicates([H,H|T],[H|List]) :- remove_duplicates(T,List).
remove_duplicates([H,X|T],[H|T1]):- X\=H, remove_duplicates([X|T],T1).
我想到的另一种方法是使用 member 来查看 Tail 是否包含 Head。但是,我能想到以这种方式解决它的唯一方法是,如果 head 是 tail 的成员,我会移除头部。但是,这将仅保留数字的最后一个实例并破坏列表中数字的相对顺序。
例如:
[1,2,2,3,4,5,5,2]
[1,3,4,5,2]
当我真正想要的时候
[1,2,3,4,5]
【问题讨论】:
标签: list duplicates prolog logic predicate