さて、ここで問題です。次の式を計算した結果はいくつになるでしょうか。
1.
2.0
*. 10.0 *. 3.141592653589793
2.
10.0
*. 10.0 *. 3.141592653589793
3.
20.0
*. 20.0 *. 3.141592653589793
計算自体は簡単ですが、同じ数3.141592653589793を何度も入力するのは、いかにも非生産的です。こういうときは、その数を表す変数を定義するのがプログラミングの常套手段です。そうすれば、たとえば円周率として用いる数を後から変えたくなっても、一回の変更でOKとなり、プログラムの保守が簡単になります。OCamlでは
# let pi = 3.141592653589793 ;;
val pi : float = 3.14159265358979312
のように、「let 変数の名前 = 式」という構文で変数を定義することができます。定義した変数は、式の中で普通に使用することができます。
# 2.0 *. 10.0 *. pi ;;
- : float = 62.8318530717958623
# 10.0 *. 10.0 *. pi ;;
- : float = 314.159265358979326
# 20.0 *. 20.0 *. pi ;;
- : float = 1256.6370614359173
しかし「10.0 *. 10.0 *. pi」と「20.0 *. 20.0 *. pi」のあたりは、まだ同じような計算をしていて無駄な感じがします。こういうときは、浮動小数rを引数(ひきすう)とし、r *. r *. piを返値(かえりち)とする関数を定義するのが鉄則です。OCamlでは、やはりlet構文を使用して関数を定義することができます。
# let area_of_circle r = r *. r *. pi ;;
val area_of_circle : float -> float = <fun>
# area_of_circle 10.0 ;;
- : float = 314.159265358979326
# area_of_circle 20.0 ;;
- : float = 1256.6370614359173
関数area_of_circleの型はfloat -> floatになります。これは「浮動小数を受け取って浮動小数を返す関数」という意味です。