lists モジュール、自前の関数、リスト内包表記の速度比較
検証コード
感想
foreach
末尾再帰できなくても自前の関数の方が早い・・・コードの書き方が悪いのかな?
lists:foreach/2 を使ったからといって、可読性が劇的に上がるわけでもないので、lists:foreach/2 は使うの止めよう。
foreach に関しては、lists:foreach、 関数渡し - いたわさににほんしゅ こちらを参考に。
reverse
検証コードを繰り返し実行した所、lists:reverse/1 の方が、自前の関数より早い事の方が多かった。
今後、lists:reverse/1 は積極的に使って行く。
map
関数呼び出しが存在しないなら、リスト内包表記が、速度と可読性のバランスが取れていると思う。
これみたいに関数を使うなら、素直に lists:map/2 を使った方が良い。
ただ、lists:reverse/1 を使っていたとしても、自前の関数の方が lists:map/2 より早い。
個人的には、可読性優先なので、lists:map/2 を使う。
速度を気にするなら、プロセスを分割したり、他のノードに処理を委譲したり、処理内容そのものを変更したりする方が良い気がする。
foldl
こちらも map と同様に、自前の関数の方が早い。
ただ、やはり可読性優先で、lists:foldl/2 を使う。
lists:foldl/2 + lists:reverse/1 vs lists:foldr/2 を後で検証する。
filter
リスト内包表記が一番早く、可読性も高い。
関数を二つ三つ呼んで判定するパターンを後で検証する。
map and filter
filter と同様。