例外
(* 適当に例外を3つ宣言。楽でいいですね。 *) # exception E1;; exception E1 # exception E2;; exception E2 # exception E3;; exception E3 (* 例外を発生させるだけの子。 *) # let foo = function | 1 -> raise E1 | 2 -> raise E2 | 3 -> raise E3 | otherwise -> "Lisp !" ;; val foo : int -> string = <fun> (* 例外もパターンマッチ! *) # let bar n = try foo n with | E1 -> "e1" | E2 -> "e2" | otherwise -> "??" ;; val bar : int -> string = <fun> (* (bar 4)はそもそも例外を発生しないのでtryされない *) # (bar 1, bar 2, bar 3, bar 4);; - : string * string * string * string = ("e1", "e2", "??", "Lisp !")
例外とは関係ないけど、letの挙動にまだ慣れることができない。
# let a = 99 in a + 1 ;; - : int = 100 # a;; (* Error: Unbound value a *) (* こうしなきゃならない *) # let a = let b = 999 in b + 1;; val a : int = 1000 # a;; - : int = 1000
後者の1行目がlet宣言で、2行目がlet式・・・でいいのかな。
五十嵐先生の本を買ってちゃんと勉強しないと!