📝

Haskellの関数(作成、カーリー化、部分適用) 学習メモ1

2025/01/24に公開

作成

引数が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という新しい関数を作成している。

参考

https://zenn.dev/masahiro_toba/articles/0e3a926aca9ea6

Discussion