Подтвердить что ты не робот

Проверьте, находится ли элемент в списке (Lisp)

Какой простой способ проверить, находится ли элемент в списке?

Что-то вроде

(in item list)

может возвращать true, если item=1 и list=(5 9 1 2) и false, если item=7

4b9b3361

Ответ 1

Общий 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

Ответ 2

Используйте MEMBER, чтобы проверить, находится ли элемент в списке:

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

В отличие от FIND, он также может проверить, есть ли NIL в списке.

Ответ 3

Вы можете использовать find:

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

Рассмотрим использование аргумента :test:

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