構造体の比較
CommonLispでは、別メモリに確保されている構造体は、equalでもtにならない。
(defstruct hoge name) (setf a (make-hoge :name "hoge")) (setf b (make-hoge :name "hoge")) (equal a b) ; => nil
そこで、使うのがequalp。
(equalp a b) ; => t
定義
COMMON LISP 第2版によると、equalpは次のように定義されている。(構造体回りだけを抜粋)
- 片方が:typeが指定されていて、もう片方が指定されていないならnilを返す
- 名前(defstructで指定したやつ)が同じで、対応するスロット(同じ名前のスロット)の内容がequalpならtを返す
と定義されていた。