> (eq? 1 1)
#t
> (eq? 1.1 1.1)
#f
> (= 1.1 1.1)
#t
これは DrScheme の対話ウィンドウです。= と eq の違いを誰か説明してくれませんか? スキームで?
= 数値を比較します。等?パラメータがメモリ内の同じデータ オブジェクトを表しているかどうかをテストします。同等?eq と同じようにテストするため、2 番目のケースで機能するはずです。ただし、プリミティブを特別にテストします。 スキームの等価述語の詳細については、こちらを参照してください。
それ以来、私はそれを推測するでしょう
等?パラメータがメモリ内の同じデータ オブジェクトを表している場合を除き、 #f に評価されます。
と
スキームは、正確な数 (1) とは異なる方法で不正確な数 (1.1) を格納します。
2 つの 1.1 引数はメモリ内の同じ場所に存在せず、eq? に対して #f を返します。
等?数字については予測不可能です。同じ数値がメモリ内の同じ場所にあるように数値リテラルがインターレッドされるかどうかは、実装次第です。たとえば、Racket 言語は最近、読み取り中にそのようなリテラルをインターンすることを選択しました。 http://www.mail-archive.com/dev@racket-lang.org/msg04893.html
言語実装のランタイムが各数値を一意に表すかどうかはわかりません。これは、float や bignum などのボックス化された値に影響を与える可能性があります。=が数値の述語として存在するのはそのためです。浅いポインターの等価性ではなく、コンテンツの等価性をチェックします。
これは、Scheme のような言語に限ったことではありません。たとえば、同等性と同等性は Python で発生します ( isと== )。