4

Erlang で 16 個のディレクトリを作成したいと考えています。for ( create_dir("work/p" ++ A, ここで、A はリスト [0, 1, ... f] の要素) (16 進数の 16 の数字)。

もちろん、mkdir ("work/p0")、mkdir("work/p1") などのような 16 行を書くこともできます。

私はリストを見てきました:foreach。例では fun が使用されていますが、ループの外で関数を定義して呼び出すことは可能ですか?

私はErlangは初めてで、C++などには慣れています。

4

1 に答える 1

5

はい、 への呼び出しの外で (名前付きの) 関数を定義することは可能lists:foreach/2です。しかし、なぜあなたは?これは、無名関数が非常に便利な場合です。

lists:foreach(fun(N) ->
                  file:make_dir(
                      filename:join("work", "p"++integer_to_list(N, 16)))
              end, lists:seq(0, 15)).

このfilename:join/2呼び出しは、適切なディレクトリ セパレータを使用して文字列 を作成しますwork/pN。ここで、Nは を使用して作成された 16 進表現の整数でinteger_to_list/2、整数を基数 (16) の文字列 (リスト) に変換します。

lists:seq/2[A,A+1,A+2,...,B-1,B]は、指定されたリストAとを返すフレンドリーな小さな関数ですB

ここではリスト内包表記構文を使用することもできますが、副作用だけのために関数をリストに適用しているため、foreach.

本当に別の関数を定義したい場合は(それを呼び出してfoo、42 個の引数を取ると仮定しましょうfun foo/42)、コード内でそれを参照できます。この式は、インラインで定義された無名関数のように、 に渡すことができる関数オブジェクトに評価されますlists:foreach/2

于 2013-03-30T17:16:27.133 に答える