Preludeつづきのつづき
今日は,filterから.
filter
与えられたリストから,与えられた条件を満たす要素を抜き出す.とりあえず簡単に.
filter' :: (a -> Bool) -> [a] -> [a] filter' _ [] = [] filter' f (x:xs) | f x = x:filter' f xs | otherwise = filter' f xs
flip
一つの関数,2つの引数を与えられて,2つの引数を逆にして関数に通す.うん,言葉にするのが難しい.
flip' :: (a -> b -> c) -> b -> a -> c flip' f b a = f a b
貧弱,貧弱ぅ.実際書いた方が分かり易いなぁ.
fmap
これは・・・何?ググってもサッパリ.今日のナンダコレ大賞はコイツで決まり.
foldl
簡単に書くと,こんな感じかしら.
foldl' :: (a -> b -> a) -> a -> [b] -> a foldl' f a [] = a foldl' f a (x:xs) = foldl' f (f a x) xs
一応,例の動きはしてくれる.
foldr
foldlみたいなもんかな?と思ったら,良くわからない.
Main> foldr (\x y -> x / y ) 2 [8] 4.0 Main> foldr (\x y -> x / y ) 2 [8,12] 1.33333333333333 Main> foldr (\x y -> x / y ) 2 [8,12,24] 8.0 Main> foldr (\x y -> x / y ) 2 [8,12,24,4] 8.0
なんなんだこの挙動は.
今日の自作関数はコイツで.