PythonとErlangでのリスト内包表記

リストの要素全てに同じ処理を施したいときや,ある条件を満たす要素のみをリストから抽出したいときは,リスト内包表記が便利となります.これは,C++Javaには無い表記方法なので,慣れていないと若干分かりづらいかも知れません.


たとえば,リストの要素全てを2倍にしたいときは,

Python

>>> [x * 2 for x in [1, 2, 3, 4, 5]]
[2, 4, 6, 8, 10]

Erlang

1> [X * 2 || X <- [1, 2, 3, 4, 5]].
[2,4,6,8,10]

という感じで行うことが出来ます.


二つのリストから,共通項を抜き出したいときは以下のようにすると出来ます.

Python

>>> [x for x in [1, 2, 5, 8, 9] for y in [1, 5, 6, 9] if x == y]
[1, 5, 9]

Erlang

2> [X || X <- [1, 2, 5, 8, 9], Y <- [1, 5, 6, 9], X =:= Y].
[1,5,9]

という風になります.


数式であらわすと,

X' = {x | x ∈ X, y ∈ Y, x = y}

という感じです.
Erlangの方が,数学的な記法に近いですね.