📝
Haskellの関数(作成、カーリー化、部分適用) 学習メモ1
作成
引数が1つ
関数名::引数の型 -> 戻り値の型
関数名 引数 = 処理
例: 引数で受け取った値を3倍にする関数
triple :: Int -> Int
triple x = x * 3
main :: IO ()
main = do
print ( triple 5 ) -- 15
引数が複数
関数名::1つ目の引数の型 -> 2つ目の引数の型 -> 返却値
関数名 引数1 引数2 = 処理
例: 引数で受け取った2つの値の加算を行う関数
add :: Int -> Int -> Int
add a b = a + b
main :: IO ()
main = do
print ( add 2 3 ) -- 5
カーリー化
Haskellは、すべての関数は基本的に1つの引数だけ受け取る。
2つ以上の引数を受け取る関数はカーリー化
として実装される。
上記のadd
関数は、以下のように解釈される。
add :: Int -> Int -> Int
↓
-- 以下のように解釈される
add :: Int -> (Int -> Int)
これは、引数を1つ受け取り、新しい関数(Int型を受け取り、Int型を返す関数)を返すというように解釈される
部分適用
複数の引数を取る関数に、一部の引数だけを適用して新しい関数を作成することができる。
関数の再利用性を高め、より具体的な用途に特化した関数を簡潔に作成できるメリットがある。
例:部分適用を使った関数作成
add :: Int -> Int -> Int
add x y = x + y
main = do
let add5 = add 5 -- 引数で受け取った値に5足す関数を作成
print (add5 3) -- 8
print (add5 10) -- 15
この例では、add
関数に5
を部分適用することで、任意の数値に5を
加算するadd5
という新しい関数を作成している。
参考
Discussion