web-dev-qa-db-ja.com

アイテムがリストにあるかどうかを確認します(LISP)

アイテムがリストにあるかどうかを確認する簡単な方法は何ですか?

何かのようなもの

_(in item list)
_

_item=1_の場合trueを返し、_item=7_の場合list=(5 9 1 2)およびfalseを返す場合があります

31
Jeff

Common LISP

FINDはお勧めできません:

> (find nil '(nil nil))
NIL

上記は、NILがリストにないことを意味します(NIL NIL)-間違っています。

FINDの目的は、メンバーシップをチェックすることではなく、テストを満たす要素を見つけることです(上記の例では、テスト関数は通常のデフォルトのEQLです)。 FINDはそのような要素を返します。

MEMBERを使用:

> (member nil '(nil nil))
(NIL NIL)  ; everything non-NIL is true

またはPOSITION

> (numberp (position nil '()))
NIL
42
Rainer Joswig

MEMBERを使用して、アイテムがリストにあるかどうかをテストします:

(member 1 '(5 9 1 2))  ; (1 2)

FINDとは異なり、NILがリストにあるかどうかをテストすることもできます。

20

findを使用できます:

(find 1 '(5 9 1 2)) ; 1
(find 7 '(5 9 1 2)) ; nil

:test引数の使用を検討してください。

(find "a" '("a" "b") :test #'equal)
7
khachik