変数
コード内で複数回登場する数値は変数として定義すると後々便利である。
OCamlでは以下のように変数を定義する。
変数
let 変数名 = 式
OCamlにおける変数は他の言語における定数に近い。関数型言語の変数が他言語と違う点は、一度ある値を代入すると他の値に書き換えることができない部分にある。
また、OCamlにおいて定義されるすべてのデータは定義時に型推論が行われ、必ず型が付与されるようになっている。
関数
OCamlでは以下のように関数を定義する。
関数
let 関数名 引数 … = 式
前述のとおりOCamlにおける全てのデータには型が付いており、関数にももれなく型推論により自動的に型が付与される。
型推論による型付けの例
# let f x = 2 + x ;;
val f : int -> int = <fun>
# let f x = 2.0 +. x ;;
val f : float -> float = <fun>
練習
問題 4.8「与えられた鶴と亀の合計数と足の合計数に応じて、鶴の数を返す関数tsurukameを定義せよ」のコードは以下のようになる。
問題 4.8
(* 目的:[鶴と亀の数の合計数]と[足の数の合計数]に応じて、[鶴の数]を計算する *)
(* 鶴1匹の足の数 *)
let legs_a_tsuru = 2;;
(* 文字式:鶴の数 = 鶴と亀の合計数 - ((足の合計数 - (鶴1匹の足の数 * 鶴と亀の合計数)) / 2) *)
let tsurukame count_all legs_all = count_all - (legs_all - legs_a_tsuru * count_all) / 2;;
上記コードを実行すると
実行式と出力結果
# tsurukame 100 274 ;;
- : int = 63
このような出力結果が得られる。