関数型プログラミングの基礎 クロージャと部分的用 関数を使って関数を作成する
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT1(関数型プログラミングの基礎)、LESSON 5(クロージャと部分的用)、5.1(クロージャ:関数を使って関数を作成する)のクイックチェック5-1の解答を求めてみる。
コード
-- getIfXEven x =
-- \f ->
-- if even x
-- then f x
-- else x
ifEven :: Integral p => (p -> p) -> p -> p
ifEven f x =
if even x
then f x
else x
getIfXEven :: Integral p => p -> (p -> p) -> p
getIfXEven x = \f -> ifEven f x
入出力結果(Terminal, Zsh)
% ghci
GHCi, version 8.10.4: https://www.haskell.org/ghc/ :? for help
macro 'doc' overwrites builtin command. Use ':def!' to overwrite.
(0.00 secs, 0 bytes)
(0.00 secs, 0 bytes)
Loaded GHCi configuration from /.../.ghc/ghci.conf
Prelude
λ> :load sample01
[1 of 1] Compiling Main ( sample01.hs, interpreted )
Ok, one module loaded.
(0.02 secs,)
*Main
λ> inc x = x + 1
inc :: Num a => a -> a
(0.00 secs, 27,392 bytes)
*Main
λ> (getIfXEven 0) inc
1
it :: Integral p => p
(0.01 secs, 60,320 bytes)
*Main
λ> (getIfXEven 1) inc
1
it :: Integral p => p
(0.01 secs, 60,056 bytes)
*Main
λ> (getIfXEven 2) inc
3
it :: Integral p => p
(0.00 secs, 60,208 bytes)
*Main
λ> (getIfXEven 5) inc
5
it :: Integral p => p
(0.01 secs, 60,056 bytes)
*Main
λ> (getIfXEven 10) inc
11
it :: Integral p => p
(0.00 secs, 60,944 bytes)
*Main
λ> :quit
Leaving GHCi.
%