1

我找不到一种方法来使用 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。

编辑2:原来这是一个愚蠢的问题。我只是在列表模块中没有看到重复的功能。

4

2 回答 2

9

我认为erlang中有一个功能可以做到:

lists:duplicate(N,X).

%% and repeat a string like this:
repeat(X,N) ->
    lists:flatten(lists:duplicate(N,X)).
于 2012-10-19T11:56:49.223 回答
3

列表理解也可以:

> [E || _ <- lists:seq(1,N)].
于 2012-10-20T16:25:14.580 回答