2つのデータを比べたとき,「値として等しいこと」を構造的等価性(structural equality)という。「値として」だけでなく,メモリ上の同じ位置を占めていることを物理的等価性(physical equality)という。
OCaml には構造的等価性を調べる演算子 = と物理的等価性を調べる演算子 == がある。
たとえば:
# "life" = "life";; - : bool = true # "life" == "life";; - : bool = false
2つの “life” は値としては等しい(構造的等価性)けど,メモリ上の同じ位置は占めていないので,== による比較(物理的等価性)では false になっている。
一方,いったん変数を束縛してやった場合には:
# s = "life";; - : bool = false # s = s;; - : bool = true # s == s;; - : bool = true
両方とも true になる。
ふーむ,このあたりは Ruby と同じだと思っておけばいいか。