Haskell リスト内包表記

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

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]