引き続き
リスト内包表記
- 集合の内包的記法の概念に近いもの、らしい
よくわからんので見てゆくことにする
これがリストの内包表記らしい
*Main Lib> [x*2 | x <- [1..10]] [2,4,6,8,10,12,14,16,18,20]
- リスト
[1..10]
から要素を取り出す - x に束縛
|
の左側で x に対して処理を行い出力する
利点がよくわからんので先を読み進める
内包表記に条件を追加する
- 内包表記の条件のことを
述語
という
*Main Lib> [x*2 | x <- [1..10], x*2 >= 12] [12,14,16,18,20]
ここでいう述語は、x*2 >= 12
でリストの最後にカンマで追加する。
述語を使ってリストを間引くことをフィルタすると言う。
他の例
boomBangs xs = [ if x < 10 then "BOOM!!!" else "BANG!!!" | x <- xs, odd x]
- 10以上の全ての奇数を"BANG!!!"にする
- 10より小さい全ての奇数を"BOOM!!!"にする
- odd x は奇数の時、True を返す
- フィルタでFalseと判定された要素はリストに出力されない
*Main> boomBangs [7..13] ["BOOM!!!","BOOM!!!","BANG!!!","BANG!!!"]
フィルタはカンマ区切りで複数適用できる
-- 10 から 20 の中で、13, 15, 20 以外 *Main> [ x | x <- [10..20], x /= 13, x /= 15, x /= 20] [10,11,12,14,16,17,18,19]
複数のリストから要素を取得できる
*Main> [ x * y | x <- [1,2,3], y <- [4,5,6]] [4,5,6,8,10,12,12,15,18]
この場合、2つのリストの要素の全組み合わせが結果のリストに反映される
入れ子になったリストの内包表記
-- 入れ子リストから奇数を取り除く *Main> [ [ x | x <- xs, even x ] | xs <- xxs] [[2],[2,4],[8,6]]
今日はここまで。

- 作者: MiranLipovaca
- 出版社/メーカー: オーム社
- 発売日: 2017/07/14
- メディア: Kindle版
- 購入: 4人 クリック: 9回
- この商品を含むブログを見る