Haskell(6)

公開:2005-03-14 08:54
更新:2020-02-15 04:36
カテゴリ:haskell

関数合成です。

(.) :: (b->c) -> (a->b) -> (a->c)
f . g = \ x -> f (g x)
「.」という中置演算子は、(bという型の引数をとりcという型を返値とする関数)型の引数と、(aというの引数をとりbという型を返値とする関数)型の引数をとり、(aというの引数をとりcという型を返値とする関数)型を返値とする関数である。
ということで、f.gとすると、引数に関数gを適用したものにさらに関数fを適用したものとなる。
関数合成の例

summ :: [Int] -> Int
summ [] = 0
summ (x:xs) = x + summ xs

incm :: Int -> Int
incm x = x + 1

-- summ を適用したあとに、incmを適用する関数

sum_and_inc :: [Int] -> Int
sum_and_inc [] = 1
sum_and_inc a = (incm . summ) a

sum_and_inc [0..10]とすると、56が帰ってきます。