構造的等価性と物理的等価性

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 と同じだと思っておけばいいか。