読者です 読者をやめる 読者になる 読者になる

What we talk about when we talk about Technology

技術について語ります。

デザインレシピ実例

Design Recipe

整数のリストから要素の合計値を求める関数を例に、
デザインレシピの実例を示す。

1.データ定義

(* int list は
       - []                空リスト、あるいは
       - first :: rest 最初の要素が first で残りのリストが rest
                            (rest が自己参照のケース)
     という形 *)

2.目的

(* 目的:受け取ったリスト lst の各要素の和を求める *)
(* sum : int list -> int *)
let sum let = 0

3.例

(* テスト *)
let test1 = sum [] = 0
let test2 = sum [2] = 2
let test3 = sum [1; 3] = 4
let test4 = sum [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] = 55

4.テンプレート

(* 目的:受け取ったリスト lst の各要素の和を求める *)
(* sum : int list -> int *)
let sum lst = match lst with
     [] -> 0
  | first :: rest -> 0 (* sum rest *)

ここで一度テストプログラムを実行し、プログラムが実行可能であることを確認する。

5.本体(1)
今回は条件文を含まないため不要。

6.本体(2)

(* 目的:受け取ったリスト lst の各要素の和を求める *)
(* sum : int list -> int *)
let rec sum lst = match lst with
     [] -> 0
  | first :: rest -> first + sum rest

recをつけるのを忘れないよう注意。

7.テスト
テストプログラムを実行し、成功することを確認する。

プログラム全体

(* int list は
       - []                空リスト、あるいは
       - first :: rest 最初の要素が first で残りのリストが rest
                            (rest が自己参照のケース)
     という形 *)

(* 目的:受け取ったリスト lst の各要素の和を求める *)
(* sum : int list -> int *)
let rec sum lst = match lst with
     [] -> 0
  | first :: rest -> first + sum rest


(* テスト *)
let test1 = sum [] = 0
let test2 = sum [2] = 2
let test3 = sum [1; 3] = 4
let test4 = sum [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] = 55