2
utop # [1;2];;
- : int list = [1; 2]
utop # 1::2::[];;
- : int list = [1; 2]
utop # 1::2::[] == [1;2];;
- : bool = false
個別に評価された2つの式は同じに見えますが、なぜOCaml等価関数はfalseを返すのですか?1 :: 2 :: []と[1; 2]はOCamlで==の点で同じではないのはなぜですか?
このコードを再フォーマットしてください。 –
私はocamlについて何も知らないが、オンラインインタプリタで1 :: 2 :: [] == 1 :: 2 :: [] ;; falseを返します。これは、==演算子がオペランドが等しい場合ではなく、同じオブジェクト参照であるかどうかをテストすると考えることができます。私はocaml専門用語を知らない、私はそれが私が意味するものが明確であることを願っています。 – Eineki
これは*ほとんどの*言語に当てはまることに注意してください。参照型は、ほとんどの場合、ポインタ比較によって等価性がテストされます。デフォルトがコンテナーの内容の深い比較であった場合、パフォーマンスを予測することは非常に困難です。 –