引きつづきOCaml。今度はパターンマッチング。パターンマッチング自体はその名の通り、与えられた引数の値に応じた値を返す関数を定義する仕組み。
組込み型でのパターンマッチング
(* normal pattern matching *)
let color_to_num = function
"RED" -> 0
| "BLUE" -> 1
| "GREEN" -> 2
| _ -> -1;;
let num = color_to_num "RED" in
Printf.printf "%d\n" num;;
let num = color_to_num "aardvark" in
Printf.printf "%d\n" num;;
出力
$ ./a.out 0 -1
独自型でのパターンマッチング
(* matching via Sum type*)
type color_t = Red | Blue | Green ;;
let color_t_to_num = function
Red -> 0
| Blue -> 1
| Green -> 2;;
let num = color_t_to_num Blue in
Printf.printf "%d\n" num;;
(* Compile error
let num = color_t_to_num Black in
Printf.printf "%d\n" num;;
let num = color_t_to_num "aardvark" in
Printf.printf "%d\n" num;;
*)
出力
$ ./a.out 1
やっぱ型チェックが厳しいと安心してコードがかけるのがいい。正直Pythonとかはもうあまり書きたくないかも。
パターンマッチングの文法に関しては、let xxxx = function ... という書きかたと let xxxx = match x with ... という書きかたの使いわけが良くわからない。ただ、Oreillyの本で読むかぎりだとfunctionを使う方は単なるシンタックスシュガーっぽい。
0 件のコメント:
コメントを投稿