繁体   English   中英

从列表序言中删除相邻重复项

[英]Remove adjacent duplicates from a list prolog

我是Prolog的新手,我需要从列表中删除重复项,如下面的示例所示。

?- remove([a,a,b,c,a,a,b,c,b,a,a],X).
X = [a,b,c,a,b,c,b,a]

如果我理解正确,则需要删除相邻的重复项。 只需复制跳过第一个相邻元素的元素即可。 我会让你完成代码...

remove([X,X|Rest], [X|Rest1]) :-
   !,   % this commit avoid the logical alternative you'll code below
   .... % recurse to get Rest1 from Rest
remove([X|Rest], [X|Rest1]) :-
   % recurse to get Rest1 from Rest
% remember the base case !!

编辑为假指出,这种天真的remove / 2是越野车。 我已经纠正了添加remove / 3谓词的问题,该谓词完成了见证人的复制工作,即使用元素超前。

remove([X|Xs], [X|Ys]) :-
  remove(X, Xs, Ys).
remove(X, [X|Xs], Ys) :-
  !,  % discard the duplicate
  ... % recurse to get Ys from Xs, with same witness
remove(_, [X|Xs], [X|Ys]) :-
  ... % the cut above ensure that here we must change witness when recursing
% as always, remember the base case !!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM