by shigemk2

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

リスト遊び 5-5 等しいリスト*

前回
リスト遊び 5-4 集合* - by shigemk2
equivを改造する
また例によって、condを拡張することで、入れ子のリストも
比較出来るように拡張する。

(defun equiv (x y)
  (cond
   ((and (null x) (null y)) t)
   ((or (null x) (null y)) nil)
   (t (and (eq (car x) (car y))
	(equiv (cdr x) (cdr y))))))
equiv
(equiv '(1 2 3) '(1 2 3))
t
(equiv '((1) 2 3) '((1) 2 3))
nil

(defun equiv* (x y)
  (cond
   ((and (null x) (null y)) t)
   ((or (null x) (null y)) nil)
   ((and (consp (car x)) (consp (car y)))
    (and(equiv* (car x) (car y))
	(equiv* (cdr x) (cdr y))))
   ((or (consp (car x)) (consp (car y))) nil)
   (t (and (eq (car x) (car y))
	   (equiv* (cdr x) (cdr y))))))
equiv*
(equiv* '(1 2 3) '(1 2 3))
t
(equiv* '(1 2 3) '(1 2 4))
nil

(equiv* '((1) 2 3) '(1 2 3))
nil

リスト遊び―Emacsで学ぶLispの世界 (ASCII SOFTWARE SCIENCE Language)

リスト遊び―Emacsで学ぶLispの世界 (ASCII SOFTWARE SCIENCE Language)