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=> falseprogn (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=> falseeql "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
に自動的に変換されます。