Next: 1.4 n番目のデータを得る
Up: 1 リスト処理関数の定義
Previous: 1.2 eqとequal
上のmemberの定義であれば,
(member '(2) '((1) (3) (2) (4) (5)))
は,nilになってしまいます.そこで,eqをequalに置き換えて定義すれば,
> (member '(2) '((1) (3) (2) (4) (5)))
((2) (4) (5))
となる.場合によって判定関数を変えたい場合に,
(defun member (item l &key (test #'eq))
(cond
((null l) nil)
((funcall test item (car l)) l)
(t (member item (cdr l) :test test))))
という具合に,keyword引数をつけた形で定義して,
> (member '(a) '((b) (a) (c)))
NIL
> (member '(a) '((b) (a) (c)) :test #'equal)
((A) (C))
> (member 'a '((b) (a) (c)) :key #'car)
((A) (C))
generated through LaTeX2HTML. M.Inaba 平成18年5月6日