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

なんなんだこの挙動は.
今日の自作関数はコイツで.