関数の作り方

前回の復習。

関数の定義

  1. 作成する関数の目的を考える -> 関数の型(引数、戻り値)を決める
  2. 入力と出力、テストプログラムを書く
  3. 関数の本体を作る
  4. 2.で作ったテストで動作を確認

※1.はコメントとしてちゃんと書いておく

そういえば、「プログラミングの基礎」では、「デザインレシピ」という言葉が出てくる。
信頼性が高くて間違いの無いプログラムを作るための指針という感じでしょうか。要はプログラムを作るためにはどうすれば良いのかということを示すレシピのようです。
関数を作るためのデザインレシピが、上の1-4のプロセスってこと。

では、演習。。。は、学校のC言語の課題からパクってくる。

h時間、m分、s秒を渡されたらそれを秒に変換して返す関数。

1.関数の目的、型を決める

(* 時間、分、秒を秒に変換して返す *)
(* convSec : int -> int -> int -> int *)

2.テストプログラム

(* 時間、分、秒を秒に変換して返す *)
(* convSec : int -> int -> int -> int *)
let convSec h m s = 0

(* test *)
let test1 = convSec 18 30 50 = 66650
let test2 = convSec 12 40 20 = 45620
let test3 = convSec 4 50 10 = 17410

この時点では、関数convSecは常に0を返すのでtest1~3はfalseという結果になります。

3.関数本体を作る

(* 時間、分、秒を秒に変換して返す *)
(* convSec : int -> int -> int -> int *)
let convSec h m s = h * 60 * 60 + m * 60 + s

4.テストコードでテスト

(* 時間、分、秒を秒に変換して返す *)
(* convSec : int -> int -> int -> int *)
let convSec h m s = h * 60 * 60 + m * 60 + s

(* test *)
let test1 = convSec 18 30 50 = 66650
let test2 = convSec 12 40 20 = 45620
let test3 = convSec 4 50 10 = 17410

test1~3がtrueになれば、期待通りの関数ということになる。

上の関数はOcamlインタプリタではなく、ファイルで作成しました。
拡張子は「.ml」。

この関数をOcamlインタプリタで使用する場合は

# #use "function.ml" ;;

として、

# convSec 18 30 50 ;;
- : int = 66650

で、使える様になります。