List の ; と tuple の ,
List, Array, Record などの要素区切りの ; はとても奇妙に見えるかもしれない。 OCaml を使っている人でもあまり意識していないのだが、実は一貫性がある。
- A ; B は B ; A と書いても型は変わらない
- A , B は B , A と書くと型が変わる場合がある
例:
print_string "hello"; print_string "world" { a = 42; b = "hello" } [ 1; 2; 3 ] [| 1; 2; 3 |]
これらの要素を入れ替えても型は変わらない。もちろん意味は変わる場合がある。
例:
(1, "hello") (int, float) Hashtbl.t
これらの要素を入れ替えると型が変わってしまう。