- 870 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 12:04:36 ]
- let には二通りある:
let f x y z = 式 (省略) let パターン = 式 パターンは、簡単に言えば、変数を含んだ値のようなもの。 右辺の式を評価後、パターンに対してパターンマッチを行い、 パターン内に変数があれば、変数部分に該当する値を束縛する: let x = 1 (* x = 1 *) let (x,y) = 1, 2 (* x = 1, y = 2 *) type t = { label : int; foo : float } let { label = x } = { label = 2; foo = 3.0 } (* x = 2 *) let x::xs = 1 :: [] (* x = 1, xs = [] *) 変数がなければ束縛は起こらない。 let true = 3 > 2 (* no binding *) パターンの定数と、右辺の結果に齟齬があるばあい、パターンマッチは失敗する: let (false, true) = 3 > 2, 2 > 0 (* match failure *) let () = print_string "..." 最後の式は右辺の結果を () にパターンマッチさせているが、() の型 unit には () しか値がないから、マッチは必ず成功する。なので、コンパイラはわざわざこの マッチを行うようなコードは生成しない。結果、この式は、右辺を実行するだけ。
|

|