リスト内包表記
次の集合内包表記の例を考える。
S = { 2 ⋅ x ∣ x ∈ N , x 2 > 3 } {\displaystyle S=\{2\cdot x\mid x\in \mathbb {N} ,\ x^{2}>3\}}
あるいは
S = { 2 ⋅ x : x ∈ N , x 2 > 3 } {\displaystyle S=\{2\cdot x:x\in \mathbb {N} ,\ x^{2}>3\}}
この表記は、「 S {\displaystyle S} は、 x {\displaystyle x} が自然数の集合 ( N {\displaystyle \mathbb {N} } ) の元であり、かつ x {\displaystyle x} の二乗が 3 {\displaystyle 3} より大きいようなすべての『 x {\displaystyle x} の2倍』なる数」を意味する。
最小の自然数x=1は、条件x>3を満たさない(1>3は偽)ため、2・1はSに含まれない。次の自然数2は、条件を満たす(2>3)。他のすべての自然数も同様である。 したがって、xは 2, 3, 4, 5... で構成される。集合Sは「xの2倍」なるすべての数値で構成されるため、S = {4, 6, 8, 10...} で与えられる。
言い換えれば、Sは2より大きいすべての偶数の集合である。
注釈を加えると以下のようになる。
S = { 2 ⋅ x ⏟ 出力 ∣ x ⏟ 変数 ∈ N ⏟ 入力 , x 2 > 3 ⏟ 述語 } {\displaystyle S=\{\underbrace {2\cdot x} _{\color {Violet}{\text{出力}}}\mid \underbrace {x} _{\color {Violet}{\text{変数}}}\in \underbrace {\mathbb {N} } _{\color {Violet}{\text{入力}}},\ \underbrace {x^{2}>3} _{\color {Violet}{\text{述語}}}\}}
x {\displaystyle x} は入力された集合の元を表す変数である。
N {\displaystyle \mathbb {N} } は(この例においては)入力された集合である自然数の集合を表す。
x 2 > 3 {\displaystyle x^{2}>3} は入力された集合の元に対するフィルターとして機能する述語式である。
2 ⋅ x {\displaystyle 2\cdot x} は入力された集合の元から新しい集合の元を生成する出力式である。
The Haskell 98 Report, chapter 3.11 List Comprehensions.
The Glorious Glasgow Haskell Compilation System User's Guide, chapter 7.3.4 Parallel List Comprehensions.
The Hugs 98 User's Guide, chapter 5.1.2 Parallel list comprehensions (a.k.a. zip-comprehensions).