Erlang中的重复元素列表

Posted

技术标签:

【中文标题】Erlang中的重复元素列表【英文标题】:List of repeating element in Erlang 【发布时间】:2012-10-10 00:39:54 【问题描述】:

我找不到使用 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:原来这是一个愚蠢的问题。我只是在列表模块中没有看到 duplicate 函数。

【问题讨论】:

【参考方案1】:

我认为erlang中有一个函数可以做到:

lists:duplicate(N,X).

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

【讨论】:

嗯,为什么要扁平化?不正是我正在寻找的重复吗? 对不起,我没有注意到。我想了一个字符串的重复方法。【参考方案2】:

列表理解也可以:

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

【讨论】:

以上是关于Erlang中的重复元素列表的主要内容,如果未能解决你的问题,请参考以下文章

Erlang应该如何过滤列表中的元素,并添加标点和[]?

在erlang中列出尾部模式匹配

Erlang:检查重复的插入元素

Haskell 和 Erlang 中的模式匹配

在列表中查找字段的位置 Erlang

Elixir/Erlang:变量列表与许多其他列表合并时出错