レコード
レコード
前回は、内部構造を持つデータとして「組」というのをやった。
以下のような形で記述することで、hogeのとった点数は80であるというデータを表す。
("hoge", 80)
ただ、これだと常に(名前, 点数)の順番、要素の数を守らないといけないのと
単純にデータはただ並んでいるだけです。
名前が何なのか、とか、その人は何点とったのかという様に
それぞれのデータが何を表しているのかを明確にするためには
レコードを使用して、データに名前を付けて管理する。
レコードの書式
{ 名前1 = 値1 ; 名前2 = 値2 ; ......}
※名前1,名前2をフィールドと呼ぶ。
といっても、レコードを使う場合には、自分で型を定義し、使用するフィールドを宣言しないといけない。
新しい型の定義は
type 定義する型の名前 = { 型の定義 }
具体的には以下のような形で表す。
(* 生徒1人分のデータを表す型 *) type student = { name : string; (* 名前 *) score : int; (* 点数 *) result : string; (* 成績 *) }
※フィールド名(ここでは、name/score/result)は他のレコードのフィールド名も含めて重複できない。
レコードの要素を取り出す
組と同様にレコードの要素を取り出す場合にもmatch文を使う。
復習:match文
match 式1 with パターン -> 式2
レコードの場合、パターンは以下の形式
{ フィールド1 = パターン変数1 ; フィールド2 = パターン変数2 ; .....}
上で作ったstudent型のレコードから、成績を通知する関数は以下の様になる。
let notice student = match student with { name = n ; result = r } -> n ^ "さんの成績は" ^ r ^ "です。"
※レコードの要素を取り出す時のパターンでは、不要なフィールドを省略できる。