Function EQUALP
equalp
x y => generalized-boolean
x - オブジェクト
y - オブジェクト
generalized-boolean - generalized-boolean
もしx
とy
がequal
であればtrueを返却します。 あるいはそれらの要素がお互い同じ型であり、 下記に示す場合のときはtrueが返却されます。
char-equal
のとき。 =
で等しいとき。 S1
とS2
が、同じクラスであり、 S1
の各スロットの値とS2
の対応する各スロットの値が equalp
において同一のとき。 equalp
は、上記で明確に指定されたもの以外の どんなオブジェクトにも降りては行きません。 次の図は、前のリストを要約した情報です。 加えて、図にはequalp
のふるまいの優先順位を載せており、 上に記載されているものの方が下のものより優先順位は高くなります。
型 | ふるまい |
---|---|
number | = を使用 |
character | char-equal を使用 |
cons | 降りて行く |
bit vector | 降りて行く |
string | 降りて行く |
pathname | equal と同じ |
structure | 降りて行く。上記の記載参照。 |
他のarray | 降りて行く |
hash table | 降りて行く。上記の記載参照。 |
他のobject | eq を使用 |
Figure 5-13. equalp
のふるまいの要約と優先順位
equalp 'a 'b) => false
(equalp 'a 'a) => true
(equalp 3 3) => true
(equalp 3 3.0) => true
(equalp 3.0 3.0) => true
(equalp #c(3 -4) #c(3 -4)) => true
(equalp #c(3 -4.0) #c(3 -4)) => true
(equalp (cons 'a 'b) (cons 'a 'c)) => false
(equalp (cons 'a 'b) (cons 'a 'b)) => true
(equalp #\A #\A) => true
(equalp #\A #\a) => true
(equalp "Foo" "Foo") => true
(equalp "Foo" (copy-seq "Foo")) => true
(equalp "FOO" "foo") => true
(setq array1 (make-array 6 :element-type 'integer
(:initial-contents '(1 1 1 3 5 7)))
=> #(1 1 1 3 5 7)
setq array2 (make-array 8 :element-type 'integer
(:initial-contents '(1 1 1 3 5 7 2 6)
6))
:fill-pointer => #(1 1 1 3 5 7)
equalp array1 array2) => true
(setq vector1 (vector 1 1 1 3 5 7)) => #(1 1 1 3 5 7)
(equalp array1 vector1) => true (
なし。
なし。
なし。
eq
, eql
, equal
, =
, string=
, string-equal
, char=
, char-equal
オブジェクトの同一性は、 正しいアルゴリズムによって決められる一意性といった考え方はありません。 この同一性の関数が適切に使われる場合というのは、 ただ特定のプログラムで必要になったときの文脈でのみ判断できます。 これらの関数はどんな型の引数でも取れますし、 それらの関数名は非常に一般的に聞こえますが、 equal
とequalp
は全てのアプリケーションにおいて 適切に使えるものではありません。