OCaml

Pervasives.compareしてはいけない型 (2): Set.S.t, Map.S.t, Big_int.big_int

Pervasives.compare というか、 = で比較できない、あるいはしても意味がない型について。 OCaml 3.10.0 (Cygwin) にてテスト。 Set.S.t Set.S.compare を使いましょう。Pervasives.compareで比較すると、集合として正しく比較できません。 module IntSet = …

華麗に型推論をすり抜ける

誤: print_string( (Printf.sprintf "%s = %s;\n" "a" "b") ^ (Printf.sprintf "%s = %s + %s;\n" "a" "b") (Printf.sprintf "%s = %s;\n" "a" "b") )正: print_string( (Printf.sprintf "%s = %s;\n" "a" "b") ^ (Printf.sprintf "%s = %s + %s;\n" "a" "b"…

list_map_and_concat

リストの各要素に0要素以上を対応させてつなぎたい時。

list_map_partial

type t = A of int | B of stringみたいな場合に、t listから A(i)のiだけ取り出して int list を作りたい時など。

Pervasives.compareできない型

let a = Big_int.succ_big_int Big_int.zero_big_int in let b = Big_int.unit_big_int in a = bとかすると Fatal error: exception Invalid_argument("equal: abstract value")と実行時に出る。 コンパイル時に型推論的にはじいてくれないだろうか。ちなみ…