Haskell 関数を定義する構文
Haskellの基本的な関数の作り方を学びます。
1.2 赤ちゃんの最初の関数
(p.5)
関数を定義する構文
- 関数名の後ろにスペースで区切った引数が続きます。
- 引数の後ろには=演算子が続き、関数の本体を表すコードがそれに続きます。
if式
Haskellプログラムは関数の集まりです。
関数はデータ値を結果の値に変換するのに使われ、すべての関数は何らかの値を返します。
そしてその値はまた別の関数によって使われます。
だから、すべての関数は何かを返さなければなりません。
これは、すべてのifは対応するelseを持たなければならないことを意味します。
さもなければ、ある条件を満たすときは値を返し、満たさないときは返す値がないというような関数を定義できてしまいます!
簡単に言うと、Haskellのifは必ず値を返す式であって、文ではないのです。
関数名に使われる「'」(アポストロフィー)
Haskellでは、関数名に「'」(アポストロフィー)の文字が使えます。
習慣的に、正格版の関数(遅延評価ではない関数)を表したり、少し内容を変更したバージョンの関数に似た名前をつけるために利用されます。
関数名は小文字で始める
Haskellの命名則では、関数名は小文字で始めます。
(大文字で始めると、関数ではないものとして扱われてしまうため)
Haskellでは関数を大文字で始められないことになっています。
(参考)Haskell の文法
- 型の名前と構成子は大文字で始めます。
- 関数、引数、定数は小文字で始めます。
大文字で始めるのは、型の名前など、他のものに割り当てられているんですね!
引数がない関数
関数が1つも値を取らないとき、これを定義とか名前とか呼びます。
引数がない場合は、すなわち「定数」を定義していることになります。
サンプルコード
以下の内容を「baby.hs」として保存。
GHCiで「baby.hs」を読み込んで、作った関数を使ってみる。
型注釈
もう少し先に進むと、関数を定義するときに「型注釈」(シグネチャー)も書くようになりますが、現時点では書いていません。
(「型注釈」がないときは、「型推論」でうまく処理してくれるから大丈夫?)
まとめ
- 関数名は小文字で始める。(大文字で始めると、関数以外のものとして扱われる)
- 引数名も小文字で始める。
- 引数がない関数は、定数になる。(定数名も小文字で始める)
- 関数名に「'」(アポストロフィー)が使える。
- 内容が似たような関数に、別名を付けるとき、習慣的に「'」を付けている。
- Haskellの「if」は文ではなく式。必ず「else」とセットで使う。
現場からは以上です。
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 580回
- この商品を含むブログ (73件) を見る