2011年08月10日(水)
リスト内包表記 - その他
独習 | |
![]()
zip 関数の使用例
positions :: Eq a => a -> [a] -> [Int] positions x xs = [i| (y,i) <- zip xs [0..n], x == y] where n = length xs - 1
文字列の内包表記
文字列は文字のリストである。内包表記が使える。
count :: Char -> String -> Int count x xs = length [y|x <- xs, x == y] > count 's' "Mississippi" 4
- 作者: Graham Hutton,山本和彦
- 出版社/メーカー: オーム社
- 発売日: 2009/11/11
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 448回
- この商品を含むブログ (108件) を見る
リスト内包表記 - ガード
独習 | |
![]()
ガードの例
factors :: Int -> [Int] factors n = [x | x <- [1..n], n `mod` x == 0] -- 約数を求める
primes :: Int -> [Int] primes n = [x| x <- [2..n], prime x] -- 素数を全て求める
find :: Eq a => a -> [(a,b)] -> [b] find k t = [v| (l,v) <- t, k == l] -- 組のリストからキーを指定して検索 > find 'b' [('a',1),('b',2),('c',3),('b',4)] [2,4]
リスト内包表記 - 生成器
独習 | |
![]()
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]
コメント