% Function EQL
Function EQL
eql
x y => generalized-boolean
x - オブジェクト
y - オブジェクト
generalized-boolean - generalized-boolean
eql
の返却値は、2つのオブジェクトx
とy
が
下記の場合にtrueになります。
x
とy
がeq
のときx
とy
が両方とも数であり、同じ型で同じ値のときx
とy
が両方とも文字であり、同じ文字として表現されるときそれ以外のときは、eql
の値はfalseです。
もし実装が正と負のゼロを違う値としてサポートするときは、
(eql 0.0 -0.0)
はfalseが返却します。
そうでなければ-0.0
という構文を読んだとき、
それは0.0
という値として解釈されるので
(eql 0.0 -0.0)
はtrueを返却します。
(eql 'a 'b) => false
(eql 'a 'a) => true
(eql 3 3) => true
(eql 3 3.0) => false
(eql 3.0 3.0) => true
(eql #c(3 -4) #c(3 -4)) => true
(eql #c(3 -4.0) #c(3 -4)) => false
(eql (cons 'a 'b) (cons 'a 'c)) => false
(eql (cons 'a 'b) (cons 'a 'b)) => false
(eql '(a . b) '(a . b))
=> true
OR=> false
(progn (setq x (cons 'a 'b)) (eql x x)) => true
(progn (setq x '(a . b)) (eql x x)) => true
(eql #\A #\A) => true
(eql "Foo" "Foo")
=> true
OR=> false
(eql "Foo" (copy-seq "Foo")) => false
(eql "FOO" "foo") => false
通常、1.0s0
と1.0d0
が違うデータの型だと仮定した場合において、
(eql 1.0s0 1.0d0)
はfalseです。
しかし実装は、異なった4つの浮動小数の型を提供する必要はなく、
4つの型をいくつかの小さい型に潰してしまっても許されます。
そのような実装では(eql 1.0s0 1.0d0)
はtrueになるかもしれません。
なし。
なし。
なし。
eql
はeq
と同じですが、
引数が文字か数の同じ型であり
それらの値を比較するときが違っています。
したがって、eql
は
2つのオブジェクトが概念的に等いかどうを言っており、
一方eq
は2つのオブジェクトが
実装的に同一であるかどうかを言っています。
このような理由により、
シーケンスを引数として受け取ったオペレーターの叙述部が
デフォルトで比較を行う際に、
eq
ではなくeql
を使用します。
eql
は、2つの浮動小数が同じ値と表現されているときでさえ、
真にならないかもしれません。
=
は数学的な値を比較する際に使われます。
2つの複素数は、
実部がeql
で虚部がeql
であれば
eql
とみなされます。
例えば、(eql #C(4 5) #C(4 5))
はtrueであり、
(eql #C(4 5) #C(4.0 5.0))
はfalseです。
(eql #C(5.0 0.0) 5.0)
はfalseであり、
(eql #C(5 0) 5)
はtrueであることに注意してください。
(eql #C(5 0) 5)
の場合は、#C(5 0)
が複素数ではなく、
それは整数5
に自動的に変換されます。