2 つの要素の equality を調べる関数が 2 つあります。以下、それらについて述べま す。特定のタイプのオブジェクトの equality を調べる関数も存在しています。それら のプレディケートに関してはそれぞれのタイプに関するチャプターを参照して下さい。
Function: eq object1 object2
この関数は、2 つのオブジェクトが同じオブジェクトである場合 t を返し、そう でない場合 nil を返します。同じ print 名を持つシンボルは常に eq です (uninterned シンボルに関してはどうだろう??)。同じ値の数値は eq です。その 他のオブジェクト(e.g., リスト、ベクトル、ストリング)で同じ要素からなるもの は eq であることもないこともありえます。
また、2 つのオブジェクトが互いに eqである場合、一方を変更すると、その変更 は他方に対しても行なわれます。
(eq 'foo 'foo) => t (eq 456 456) => t (eq "asdf" "asdf") => t (eq '(1 (2 (3))) '(1 (2 (3)))) => nil (eq (point-marker) (point-marker)) => nil
Function: equal object1 object2
この関数は、2 つのオブジェクトが構造的に同じものである場合 t を返し、そう でない場合 nil を返します。 eq なオブジェクト(特に primitive オブジェクト) はまた equal でもあります。リスト、ベクトル、マーカー、ストリングは対応す
る(それぞれの)要素が equal である場合 equal です。
(equal "asdf" "asdf") => t (equal "asdf" "ASDF") => nil (eq '(1 (2 (3))) '(1 (2 (3)))) => t (eq [(1 2) 3] [(1 2) 3]) => t (eq (point-marker) (point-marker)) => t