1

Erlang ライブラリ関数を使用して、要素 E が N 回繰り返されるリストを作成する方法が見つかりません。確かに、書くのは簡単ですが、

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 に答える