ここでは、OCaml の対話式システムを使用して Caml の概要を説明します。Unix シェルでは ocaml で起動します。Windows では OCamlwin.exe で起動します。ユーザの入力には行頭に #
をつけて、システムの返答には行頭に #
をつけずに表記します。
対話式システムでは、ユーザの入力文が ;;
で区切られます。システムはその入力文をその場でコンパイルし、実行し、評価の結果を表示します。文は単純な式か、識別子の let
定義式 (値か関数) です。
#
1+2*3;;
- : int = 7
#
let pi = 4.0 *. atan 1.0;;
val pi : float = 3.14159265359
#
let square x = x *. x;;
val square : float -> float = <fun>
#
square(sin pi) +. square(cos pi);;
- : float = 1.
Caml システムはそれぞれの文に対して値と型の両方を計算するので、関数の引数であっても、明示的な型の宣言は必要ありません。システムが引数の扱われ方からその引数の型を推論します。整数と浮動小数点数は異なる型なので、演算子も異なることに注意してください。+
と *
は整数同士を計算して整数を返し、+.
と *.
は浮動小数点数同士を計算して浮動小数点数を返します。
#
1.0 * 2;;
This expression has type float but is here used with type int
再帰的な関数は let rec
で定義します。
#
let rec fib n = if n < 2 then 1 else fib(n-1) + fib(n-2);;
val fib : int -> int = <fun>
#
fib 10;;
- : int = 89