Haskell-関数
Haskellの関数について
関数の形式について
Haskellにおける関数は、関数名と引数をスペースで区切ります。
手続き型プログラミング言語のようなカッコとカンマは用いません。
関数名 引数1 引数2 ...
関数定義について
関数は関数名と引数を記述して、その後に「=」を挟んで本体を定義します.
Haskellは純粋関数型言語であるため、基本的に代入という副作用の操作は認められません。
「=」が用いられた場合、それは式の定義を返す関数を意味します。
関数名 引数 = 式の定義
例えば、以下のfunc1はxとyを加算するという関数定義となります。
そして、func2は常に定数として2を返す関数(定数関数)定義となります。
func1 x y = x + y
func2 = 2
関数の型を定義する
関数を定義する際、関数の「型の定義」を指定することができます。
ただし、Haskellでは型推論を行うので、必ずしも型を定義する必要はありません。
関数の引数や戻り値に対して型を指定して、厳格な呼び出しを明示したい場合に関数の型を定義します。
関数の引数と返り値の型を明示する場合には、それぞれの型を順に「->」でつないで型シグネチャを記述します。
関数名 :: 型シグネチャ
関数名 引数 = 式の定義
以下のプログラムは、Integerを加算するaddという関数を定義しています。
型シグネチャとして、Integerの引数を二つ取ってIntegerを返す関数であることを定義しています。
$ cat calc.hs
#!/usr/bin/env runghc
add :: Integer -> Integer -> Integer
add x y = x + y
main = print(add 5 2)
$ ./calc.hs
7
関数関連の機能
Haskellでは、関数に対して以下のような概念と機能が用意されています。