関数型言語ML(SML, OCaml, etc.), Part 5at TECH
関数型言語ML(SML, OCaml, etc.), Part 5 - 暇つぶし2ch870:デフォルトの名無しさん
09/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 には
() しか値がないから、マッチは必ず成功する。なので、コンパイラはわざわざこの
マッチを行うようなコードは生成しない。結果、この式は、右辺を実行するだけ。



次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch