32.4 関数の利用

ここまでの内容で,整数と小数およびそれらの四則演算はできるようになりましたが,計算の種類はたくさんあり四則演算だけでは対応できないものがあります.

例えば,計算に平方根を使いたいときは,四則演算でも「開平法」や「ニュートン法」により計算できますが,それらの計算式を毎回書くのは大変ですしそこに大量の式を書くと本筋の計算は何をしているのかわからなくなります.

そこでプログラム言語では,数学で“√”という記号が使われるのと同様に,変数を与えたらその値に基づいた処理を行い計算結果を返す関数という機能があります.なお,プログラム言語ではここでの変数のことを引数(ひきすう)といい,計算結果を戻り値といいます.

関数の利用

OCamlで関数を使うには,式の中で

関数名(引数1, 引数2, ...)

と書きます.このように書くと関数が計算した結果を式で使うことができます.

ただ正確には,関数によって事情が違い,

関数名 引数1 引数2 ...

のように書かなければならない場合もあります.そして,OCamlで標準で用意されている関数は後者の方です.

ですが,他のプログラム言語や数学の関数は前者で書かれることが多いので,ここでもそれにあわせて解説します.なお,平方根のように引数が1つしかない関数は,どちらで書いてもプログラムは動くので特に注意する必要はありません.

それはさておき,OCamlにおいて平方根を計算する関数は“sqrt”です.小数にしか使えないので注意してください.さっそく試しに使ってみましょう.

sqrt(2.0);;return2
- : float = 1.41421356237309515
(sqrt(3.0 +. 1.0) +. 4.0) /. 3.0;;return2
- : float = 2.

きちんと計算されていることがわかると思います.

様々な関数

OCamlでは様々な数学的な関数が標準で使えます.

sqrt(2.0);;return2
- : float = 1.41421356237309515 (* 平方根 *)
sin(3.14) +. cos(3.14) +. tan(3.14);;return2
- : float = -0.99999873374746 (* 三角関数 *)
asin(1.0) +. acos(1.0) +. atan(1.0);;return2
- : float = 2.35619449019234484 (* 逆三角関数 *)
exp(1.0) +. log(1.0);;return2
- : float = 2.71828182845904509 (* ネイピア数を底とする指数・対数関数 *)

なお,コンピュータにとって整数と小数は別物ですが,関数を使って相互に変換することができます.

float_of_int(5);;return2
- : float = 5. (* 整数を小数に変換 *)
int_of_float(3.7);;return2
- : int = 3 (* 小数を整数に変換(小数点以下切り捨て) *)

他にも様々な関数がある上,自分で関数を作ることもできます(参考:hwb32.6 関数の定義).