by shigemk2

当面は技術的なことしか書かない

対話によるCommon Lisp入門 41 equal

equalの自作。

xがアトムならx,yをeqlで比較する。
xがアトムでなくyがアトムならnil
x,yともにコンスの場合は、firstどうし、restどうしがequal$で等しいか再帰的に調べる

[9]> (defun equal$ (x y)
(if (atom x) (eql x y)
(if (atom y) nil
(if (equal$ (first x) (first y))
(equal$ (rest x) (rest y))
nil))))
EQUAL$
[10]> (equal$ 'hoge 'hoge)
T
[11]> (equal$ '(1 2) '(1 2))
T
[12]> (equal$ '(1 2) '(1 3))
NIL