eq、eql、equal、equalpの違いについて

今回は Common Lisp の eq、eql、equal、equalpの違いについて書いていきます。

  1. eq

    eq は 第一引数と第二引数が同じオブジェクトの場合、true を返します。 eq は主にシンボル同士を比較する場合に使用します。

  2. eql

    eql は eq が true を返す場合と、数字とcharacterの比較も行うことができます。 eq と違い、数字同士の比較と文字同士の比較が true を返しています。

  3. equal

    equal はオブジェクトのストラクチャが同一の場合、true を返します。基本的には print で同じ値が出力される場合に true が返ります。 equal はシンボル以外を比較する際に使用します。eq や eql と違い、文字列やコンスセルの比較でも true を返しています。シンボル同士を比較する場合は eq のほうが性能が良いです。

  4. equalp

    equalp は equal が true を返します。equal と違う部分は:

    1. 数字のデータ型を区別しない。
    2. 大文字小文字を区別しない。

    の二点です。

参考
CLHS: Function EQ
CLHS: Function EQL
CLHS: Function EQUAL
CLHS: Function EQUALP
syntax - What's the difference between eq, eql, equal and equalp, in Common Lisp? - Stack Overflow