akimachoのはてなブログ

ICTとデザインのためのブログ

『プログラミングの基礎』読書日誌-9日目-

はじめに

今日は,第8章 レコードです.

C言語でいう構造体ですね.確かレコードと読んだほうがメジャーがらしいですね(『cプログラマのためのアルゴリズムとデータ構造』で読んだような).Pascalもレコードと呼ぶようです.

また,ハッシュ・連想配列にも似ていると思いました.

定本 Cプログラマのためのアルゴリズムとデータ構造 (SOFTBANK BOOKS)

定本 Cプログラマのためのアルゴリズムとデータ構造 (SOFTBANK BOOKS)

レコード

組を利用するには要素の順序を覚えることが必要になります.一方,レコードは順序を覚える必要がありません.

レコードとは,ユーザが作る名前のついたデータの集合です.

{ 名前1 = 値1; 名前2 = 値2; ・・・ }

のように書いて,レコードを作ります.名前1,名前2をフィールド(field)と呼びます.

レコードの要素を取り出すパターンマッチは,次のようになります.

# let sum s = match s with
  {a = x, b = y, c = z} -> x + y + z ;;

しかし,そのまま入力したのではSyntax errorになってしまいました.ユーザが自分で型を定義しておかないといけないのです.

ユーザによる型定義

type文の構文を使い,型を定義します.

type gakusei_t = {
  name : string;
  tensuu : int;
  seiseki : string;
} ;;
type gakusei_t = { name : string; tensuu : int; seiseki : string; }

また,レコード型のフィールドの名前は被ってはいけません.

本書では,ユーザによる型には"_t"というメルクマールをつけることが推奨されています.このコーディングスタイルはC言語の構造体の名前にも使われますね(typedefのときに).

データ定義に対するデザインレシピ

  1. データ定義 ・・・ 入力と出力データの型の決定
  2. 目的 ・・・ インプット,アウトプット,関数の型の決定
  3. 例 ・・・ 関数の動きの具体例,テストケースの作成
  4. テンプレート ・・・ 入力された構造データの中身を取り出すためのmatch文作成
  5. 本体 ・・・ 関数の実装
  6. テスト ・・・ 期待したとおりに動いているかの確認.そうでない場合は,3にもどる

練習問題

問題8.1から問題8.4まで


第8章問題

問題8.5から問題8.7まで


第8章その2


プログラミングの基礎 (Computer Science Library)

プログラミングの基礎 (Computer Science Library)