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に自動的に変換されます。