2012-10-19 127 views
1

我找不到使用Erlang库函数创建一个由重复N次元素E组成的列表的方法。当然,这是一个很小写,Erlang重复元素列表

repeat(E, N) -> 
    repeat(E, N, []). 
repeat(_E, 0, L) -> 
    L; 
repeat(E, N, L) -> 
    repeat(E, N-1, [E|L]). 

但我期望这是一个单线程使用一些列表模块函数或什么。有没有办法?

编辑:好了,有这门课程的,

lists:map(fun(_) -> E end, lists:seq(1, N)) 

而是创建一个立即丢弃一个额外的列表。看起来对我来说效率低下,但也许我没有考虑Erlang的惯用。

编辑2:原来这是一个愚蠢的问题。我只是不知何故在列表模块中没有看到重复的函数。

回答

8

我觉得这是在二郎山功能可以做到这一点:

lists:duplicate(N,X). 

%% and repeat a string like this: 
repeat(X,N) -> 
    lists:flatten(lists:duplicate(N,X)). 
+0

嗯,为什么拉平?是不是重复我正在寻找什么? – njlarsson

+0

对不起,我没注意到。我想过一个重复的字符串方法。 – halfelf

2

列表理解将工作太:

> [E || _ <- lists:seq(1,N)].