関数型プログラミングの基礎 クロージャと部分適用 クロージャ:関数を使って関数を作成する
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT1(関数型プログラミングの基礎)、LESSON5(クロージャと部分適用)、5.1(クロージャ:関数を使って関数を作成する)のクイックチェック 5-1の解答を求めてみる。
コード
ifEven :: Integral p => (p -> p) -> p -> p
ifEven f x =
if even x
then f x
else x
genIfXEven :: Integral p => p -> (p -> p) -> p
genIfXEven x = \f -> ifEven f x
func1 :: (Integer -> Integer) -> Integer
func1 = genIfXEven 2
func2 :: (Integer -> Integer) -> Integer
func2 = genIfXEven 3
func :: Integer -> Integer
func = (*) 10
main = do
print $ func1 func
print $ func2 func
入出力結果(Terminal, Zsh)
% runghc sample01.hs
20
3
%