What we talk about when we talk about Technology

技術について語ります。

デザインレシピ完全版

これまでのデザインレシピに再帰関数の場合を加えた、
完全版のデザインレシピは以下の通り。

1.データ定義<<extension: 入出力にデータ定義を伴う場合>>
入力または出力で使用するデータを定義する。
再帰的なデータ型(リストなど)である場合、自己参照のケースを付記する。

2.目的
作成する関数の目的、引数、返り値を決定する。
目的をもとに関数名を決定し、ヘッダを作成する。

3.例
作成する関数に対する入力の例とそれに対応する出力の期待値を作成する。
例をもとにテストプログラムを作成する。
<<extension: 条件文を含む場合>>
場合分けのパターンを列挙し、すべての場合について例を作成する。
特に境界値の周辺の例に気をつける。
<<extension: 再帰的なデータを含む場合>>
基本的なケースと再帰的なケース両方を必ず含める。

4.テンプレート<<extension: 入力が構造を持つデータまたは再帰的なデータの場合>>
構造に応じたmatch文を作成する。
使えるパターン変数と、再帰的なデータの場合はどの変数が再帰的かについても付記する。
条件文を使うことが明らかな場合は条件文のテンプレートも作成しておく。

5.本体(1)<<extension: 条件を含む場合>>
本体作成の前に、場合分けの条件を特定する。
条件をもとに関数の大枠を作成する。

6.本体(2)
関数の本体を実装する。
出来上がった関数が再帰的な場合はletの後にrecを挿入する。
<<extension: 条件を含む場合>>
それぞれのケースを実装する。
ひとつ実装するごとにテストを実行し、成功することを確認して、次のケースを実装する。
<<extension: 再帰的なデータを含む場合>>
再帰呼び出しの意味するところを目的を使って理解する。

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