Hatena::Grouphaskell

lnzntのHaskell日記 このページをアンテナに追加 RSSフィード

2011年08月10日(水)

リスト内包表記 - 生成器

| 13:20 | リスト内包表記 -  生成器 - lnzntのHaskell日記 を含むブックマーク はてなブックマーク - リスト内包表記 -  生成器 - lnzntのHaskell日記 リスト内包表記 -  生成器 - lnzntのHaskell日記 のブックマークコメント

Hugs> [x^2|x <- [1..5]]
[1,4,9,16,25]

x <- [1..5] は生成器と呼ばれる。

Hugs> [(x,y)|x <- [1..3], y <- [4..5]]
[(1,4),(1,5),(2,4),(2,5),(3,4),(3,5)]
Hugs>
Hugs> [(x,y)|x <- [1..3], y <- [x..3]] -- 後ろの生成器は、前の生成器の変数を使える
[(1,1),(1,2),(1,3),(2,2),(2,3),(3,3)]

----

関数の例

  concat    :: [[a]] -> [a]
  concat xss = [x| xs <- xss, x <- xs]

  first   :: [(a,b)] -> [a]
  first ps = [x|(x,_) <- ps]   -- _ はワイルドカード

  length   :: [a] -> Int
  length xs = sum [1|_ <- xs]