Haskell リスト内包表記の整理。
<-
でリストの各要素を束縛する。|
以前の記述はリスト内表記の出力を表す
ghci> [x*2 | x <- [1..10]] [2,4,6,8,10,12,14,16,18,20]
フィルタリングして束縛することも可能。
ghci> [x*2 | x <- [1..10], x*2 >= 8] [8,10,12,14,16,18,20]
複数の述語を使用する。Haskellのnot equalは/=
関数を使用する。
ghci> [x*2 | x <- [1..10], x*2 >= 8, x*2 /= 16] [8,10,12,14,18,20]
リスト内包表記の関数定義
リスト内包表記を使用した関数を定義する。
ghci> doubleByOdd xs = [x*2 | x <- xs, odd x] ghci> doubleByOdd [3,4,5,6,7] [6,10,14]
複数のリストから値を束縛する
所謂、2重ループのようなイメージ。
ghci> [x*y | x <- [1..10], y <- [1,2,3]] [1,2,3,2,4,6,3,6,9,4,8,12,5,10,15,6,12,18,7,14,21,8,16,24,9,18,27,10,20,30]
リスト内包表記の入れ子
入れ子になったListを処理する例。
ghci> [ [x | x <- xs, even x] | xs <- [[1..10],[2,3,4,5,6]] ] [[2,4,6,8,10],[2,4,6]]
以下の例では束縛したListごとに適用した関数の結果が出力されていることがわかる。
ghci> [ tail xs|xs <- [[1..10],[2,3,4,5,6]] ] [[2,3,4,5,6,7,8,9,10],[3,4,5,6]] ghci> [ head xs|xs <- [[1..10],[2,3,4,5,6]] ] [1,2]
リンク
リンク