by shigemk2

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

リスト遊び 5-4 集合*

前回
リスト遊び 5-3 削除* - by shigemk2

例によって、入れ子のリストも扱えるようにする。

(defun memq (x set)
  (cond
   ((null set) nil)
   ((eq x (car set)) t)
   (t (memq x (cdr set)))))
memq
(memq 1 '(1 2 3))
t
(memq 4 '(1 2 3))
nil
(memq 1 '((1) 2 3))
nil
(memq 2 '((1) 2 3))
t

(defun memq* (x set)
  (cond
   ((null set) nil)
   ((consp (car set))
    (or (memq* x (car set))
	(memq* x (cdr set))))
   ((eq x (car set)) t)
   (t (memq* x (cdr set)))))
memq*
(memq* 1 '((1) 2 3))
t
(memq* 1 '((1 (2)) 2 3))
t
(memq* 2 '((1 (2)) 2 3))
t
(memq* 4 '((1 (2)) 2 3))
nil

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

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