リストから要素を探す - lisp-cookbook-ja/common-lisp GitHub Wiki

リスト リストから要素を探すには find または member を使います。find は見つけた要素を、member は見つけた要素以降のリストを返します。見つからない場合はいずれも nil を返します。

(find 1 '(0 1 2 3 4))
; => 1

(member 1 '(0 1 2 3 4))
; => (1 2 3 4)

(find nil '(t nil t nil))
; => nil

(member nil '(t nil t nil))
; => (nil t nil)

find, member はデフォルトでは比較に eql を使います。文字列を探す場合など、eql 以外の比較関数を使いたい場合は :test, :test-not を指定します。

(find "bar" '("foo" "bar" "baz"))
; => nil

(find "bar" '("foo" "bar" "baz") :test #'string=)
; => "bar"

(find "bar" '("foo" "bar" "baz") :test-not #'string=)
; => "foo"

要素ではなく述語を満たす(あるいは満たさない)ものを探す場合は find-if, find-if-not, member-if, member-if-not を使います。

(find-if #'oddp '(0 1 2 3 4))
; => 1

(find-if-not #'minusp '(-2 -1 0 1 2))
; => 0