タプル型、レコード型 (F#)
タプル型の定義とか、レコード型の定義とか。
(* タプル値を定義 *) let tup = (100, "hello")
(* タプルから要素を取得 *) let num, str = tup printfn "num = %d, str = %s" num str
(* タプル型をプリントする関数 (引数 : 型 * 型) で引数にタプル型を指定できる *) let printTuple (t : int * string) = let n, s = t printfn "n = %d, s = %s" n s printTuple tup
(* タプル型をちゃんと型定義 *) type SampleTuple = int * string let printTuple2 (t : SampleTuple) = let n, s = t printfn "n = %d, s = %s" n s printTuple2 tup
(* レコード型 Person の定義 タプルと違ってフィールド名が定義されている *) type Person = { name : string age : int }
(* Person の値を定義 *) let moore = { new Person with name = "Gordon E. Moore" and age = 78 } printfn "name = %s; age = %d" moore.name moore.age
(* フィールド名がユニークな場合は次の省略記法が使える *) let gates = { name = "Bill Gates"; age = 51 } printfn "name = %s; age = %d" gates.name gates.age
(* Person のリストを作成 *) let persons = [ { name = "Gordon E. Moore"; age = 78 }; { name = "Bill Gates"; age = 51 }; { name = "Linus Torvalds"; age = 38 }; ]
(* Person に対する pattern matching で検索 *) let rec findByAge51 personList = match personList with | [] -> "not found" | { name = foundName; age = 51 } :: tail -> foundName | _ :: tail -> findByAge51 tail printfn "found name is %s" (findByAge51 persons)