erlang 第6回 リスト内包表記
リスト内包表記
- map等を使わずにリストを作り出す方法
- [ F(X) || X <- List]と書く
簡単に使ってみる。
1> List = [1,4,6,8,19,20.0]. [1,4,6,8,19,20.0] 2> [X * 2 || X <- List]. [2,8,12,16,38,40.0] 3> List2 = [{hoge, 23}, {hoge, 50} | List]. [{hoge,23},{hoge,50},1,4,6,8,19,20.0] 4> [X * 10 || {hoge, X} <- List2]. [230,500]
[ F(X) || X <- List]は一般化すると[ 式 || 限定子1, 限定子2, ...]となる
- 限定子:qualifier
- ジェネレータもしくはフィルタが指定できる
- X <- Listがジェネレータ
5> [X * 10 || {hoge, X} <- List2, X > 300]. 6> [X * 10 || {hoge, X} <- List2, X > 30]. [500] 7> [X * 10 || {hoge, X} <- List2, X > 30, X < 60]. [500] 8> [X * 10 || {hoge, X} <- List2, X > 30, X < 40].
おぉ〜これは読みやすい。
今回は少なめ。ビル酔いでしんどいので。
spawn遠いなぁ・・・共有ETSテーブルとか、共有DETSテーブルとか、wktkするのに。
オマケ
この時に作ったcalculationを使ってみた。
1> List = [{add, 10, 20}, {sub, 50, 10}, {sum, 10}]. [{add,10,20},{sub,50,10},{sum,10}] 2> lists:map(fun(X) -> calculation:calc(X) end, List). [30,40,55] 3> [calculation:calc(X) || X <- List]. [30,40,55]
ほほー。