[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/10 00:21 / Filesize : 224 KB / Number-of Response : 956
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

関数型言語ML(SML, OCaml, etc.), Part 5



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 には
() しか値がないから、マッチは必ず成功する。なので、コンパイラはわざわざこの
マッチを行うようなコードは生成しない。結果、この式は、右辺を実行するだけ。







[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<224KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef