関数定義を読む、関数を定義して作る

  • 関数は、型を持つ。通常の関数は、引数を取って値を返すので、引数の型から返り値の型へ、という型の定義を持つ
  • 関数は、型定義の他に、どのような処理をするかの定義も持つ
  • 関数は、上記の2つの定義からなる
recip :: Fractional a => a -> a
recip n = 1/n
  • 上記は逆数を取る関数 recipの定義である
  • 1行目が型定義:「aをFractionaとして、aを取ってaを返す」
  • 2行目が処理定義:「型aであるnがあったとして、"recip n"と書けば、"1/n"のことである」
  • \lambdaを使って関数を作る・定義することもできる
\lambda x -> 2 * x + 1
  • これを使うと
odds :: Int -> [Int]
odds n = map (\lambda x -> 2 * x + 1) [0..n-1]
  • と書ける。oddsはIntをIntのリストにする関数で、"odds n"とInt型のnを引数として使うと、0始まりのn個の整数のリストのそれぞれの要素に\lambda x -> 2 * x +1として定義される関数を適用して、その返り値のリストを返す、となる