Function EQUAL
equal
x y => generalized-boolean
x - オブジェクト
y - オブジェクト
generalized-boolean - generalized-boolean
もしx
とy
が構造的に似たオブジェクト(同一構造)ならtrueを返却します。 オブジェクトはequal
によって下記のように扱われます。
equal
は、上記で明確に指定されたもの以外の どんなオブジェクトにも降りては行きません。 次の図は、前のリストを要約した情報です。 加えて、図にはequal
のふるまいの優先順位を載せており、 上に記載されているものの方が下のものより優先順位は高くなります。
型 | ふるまい |
---|---|
number | eql を使用 |
character | eql を使用 |
cons | 降りて行く |
bit vector | 降りて行く |
string | 降りて行く |
pathname | 機能的に同等 |
structure | eq を使用 |
他のarray | eq を使用 |
hash table | eq を使用 |
他のobject | eq を使用 |
Figure 5-12. equal
のふるまいの要約と優先順位
どのような2つのオブジェクトも、 eql
が成り立つなら、 equal
もまた成り立ちます。
equal
は、x
とy
が循環しているときは、 おそらく終了に失敗します。
equal 'a 'b) => false
(equal 'a 'a) => true
(equal 3 3) => true
(equal 3 3.0) => false
(equal 3.0 3.0) => true
(equal #c(3 -4) #c(3 -4)) => true
(equal #c(3 -4.0) #c(3 -4)) => false
(equal (cons 'a 'b) (cons 'a 'c)) => false
(equal (cons 'a 'b) (cons 'a 'b)) => true
(equal #\A #\A) => true
(equal #\A #\a) => false
(equal "Foo" "Foo") => true
(equal "Foo" (copy-seq "Foo")) => true
(equal "FOO" "foo") => false
(equal "This-string" "This-string") => true
(equal "This-string" "this-string") => false (
なし。
なし。
なし。
eq
, eql
, equalp
, =
, string=
, string-equal
, char=
, char-equal
, tree-equal
オブジェクトの同一性は、 正しいアルゴリズムによって決められる一意性といった考え方はありません。 この同一性の関数が適切に使われる場合というのは、 ただ特定のプログラムで必要になったときの文脈でのみ判断できます。 これらの関数はどんな型の引数でも取れますし、 それらの関数名は非常に一般的に聞こえますが、 equal
とequalp
は全てのアプリケーションにおいて 適切に使えるものではありません。
だいたいの考え方として、2つのオブジェクトがequal
であるとは、 ただ印字されたものが同じ表現であるときのみです。