我找不到一种方法来使用Erlang库函数来创建一个由重复N次的元素E组成的列表。当然,写一个就好了,
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-idiomatically。
编辑2 :原来这是一个愚蠢的问题。我只是在列表模块中看不到重复的函数。
答案 0 :(得分:9)
我认为erlang中有一个函数可以做到:
lists:duplicate(N,X).
%% and repeat a string like this:
repeat(X,N) ->
lists:flatten(lists:duplicate(N,X)).
答案 1 :(得分:3)
列表理解也会起作用:
> [E || _ <- lists:seq(1,N)].