实现一个Erlang列表理解,它从一个列表中获取两个元素,并创建一个新的列表列表。

我有这个代码

pair([], Acc) -> lists:reverse(Acc);

pair(L, Acc0) ->
    [ A, B | T ] = L,
    Acc = [ [A, B] | Acc0 ],
    pair(T, Acc).

正常工作:
7> l:pair(lists:seq(1,6), []).
[[1,2],[3,4],[5,6]]

但似乎我应该可以将其实现为列表理解。我的二郎甫太虚弱了,无法提出。

有什么建议么?

谢谢

最佳答案

不,列表理解不是做到这一点的好方法,根据定义,列表一次只能处理一个元素。在您的代码中,实际上不需要使用累加器,速度的差异很小,为here,没有它就会变得更加清晰。我认为至少如此。

pairs([A,B|L]) ->
    [[A,B]|pairs(L)];
pairs([]) -> [].

关于erlang - Erlang : how to implement Erlang list comprehension ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11146737/

10-11 12:24
查看更多