Function EQ
eq x y => generalized-boolean
x - オブジェクト
y - オブジェクト
generalized-boolean - generalized-boolean
もし引数が同じであり同一のオブジェクトであればtrueを、 それ以外はfalseを返却します。
(eq 'a 'b) => false
(eq 'a 'a) => true
(eq 3 3)
=> true
OR=> false
(eq 3 3.0) => false
(eq 3.0 3.0)
=> true
OR=> false
(eq #c(3 -4) #c(3 -4))
=> true
OR=> false
(eq #c(3 -4.0) #c(3 -4)) => false
(eq (cons 'a 'b) (cons 'a 'c)) => false
(eq (cons 'a 'b) (cons 'a 'b)) => false
(eq '(a . b) '(a . b))
=> true
OR=> false
(progn (setq x (cons 'a 'b)) (eq x x)) => true
(progn (setq x '(a . b)) (eq x x)) => true
(eq #\A #\A)
=> true
OR=> false
(let ((x "Foo")) (eq x x)) => true
(eq "Foo" "Foo")
=> true
OR=> false
(eq "Foo" (copy-seq "Foo")) => false
(eq "FOO" "foo") => false
(eq "string-seq" (copy-seq "string-seq")) => false
(let ((x 5)) (eq x x))
=> true
OR=> falseなし。
なし。
なし。
eql, equal, equalp, =, 3.2. コンパイル
印字したときに同じに見えるオブジェクトは、 必ずしも互いにeqで等しいとは限りません。 印字したシンボルが同じように表示されるものは、 intern関数を使用したものであれば、 通常は互いにeqで等しくなります。 しかし、同じ値を持つ数値はeqで等しい必要はありませんし、 2つの類似したリストは通常同一ではありません。
実装は、いつでも文字と数をコピーすることが許されています。 その効果のため、Common Lispではeqの引数の両方が「同じもの」のときでさえ、 その「もの」が文字と数のときは、返却値がtrueであることを保証しません。
Common Lispのほとんどの操作は、 オブジェクトの比較にeqではなくeqlを使っているか、 そうでなければデフォルトでeqlを使い、 特別に要求されたときだけeqを使用します。 しかし、下記に示す操作はeqlではなく eqを使うように定義されており、 それらを使用するようなコードで上書きすることはできません。
catch |
getf |
throw |
get |
remf |
|
get-properties |
remprop |
Figure 5-11. つねにEQLよりEQを好む操作