<cl> (member '(a) '((b) (a) (c))) NIL <cl> (member '(a) '((b) (a) (c)) :test #'equal) ((A) (C)) <cl> (member 'a '((b) (a) (c)) :key #'car) ((A) (C))このようにデフォルトではequalではなくeqlという関数で比較を行ないます. :testで比較関数を指定することでリスト構造の比較も可能となります. また,:keyでcarを指定することで各要素の内部の要素について比較すること ができています. このようなキーワード引数をもつ関数を定義する例として以下のremove-ifを 示しておきます.これは,第一引数の述語がなりたつデータを除くという手続 きです.
(defun remove-if (pred data &key (key #'identity)) (cond ((atom data) nil) ((funcall pred (funcall key (car data))) (remove-if pred (cdr data) :key key)) (t (cons (car data) (remove-if pred (cdr data) :key key)))))
<cl> (remove-if 'numberp '(a b 1 2 c d)) (a b c d) <cl> (remove-if #'(lambda (x) (eq 0 (mod x 2))) '(1 2 3 4 5 6)) (1 3 5) <cl> (evenp 10) t <cl> (evenp 11) nil <cl> (remove-if #'evenp '((1) (2) (3)) :key #'car) ((1) (3))