Erlang在列表中查找连续的相同元素

时间:2014-10-09 20:19:16

标签: list erlang

我需要从LIST中找到连续的相同元素。

从任何职位开始

即[B C C D A B]预期结果[c c]      [B C D C B A]预期结果[]

有什么建议吗?感谢

1 个答案:

答案 0 :(得分:5)

extractcc(L) -> extractcc(L,[]).

etractcc([],R) -> lists:reverse(R);
extractcc([H,H|T],R) -> extactcc(T,[H,H|R]);
extractcc([_H|T],R) -> extractcc(T,R).

这适用于您的示例,但如果连续元素超过2个则会产生奇怪的行为。这里是一个用shell编写的例子:

1> Ex = fun Ex([],R) -> lists:reverse(R);
1> Ex([H,H|T],R) -> Ex(T,[H,H|R]);       
1> Ex([_H|T],R) -> Ex(T,R) end.          
#Fun<erl_eval.36.90072148>
2> E = fun(L) -> Ex(L,[]) end.
#Fun<erl_eval.6.90072148>
3> E([1,2,3,3,4,3]).
[3,3]
4> E([1,2,1,2,1]).
[]
5> E([1,2,2,2,3]).
[2,2]
6> E([1,2,2,2,2,3]).
[2,2,2,2]

我让你找到如何编码预期的行为。