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

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

カテゴリー: OCaml パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください