Что вы делаете сейчас, как 1 == (3 || 2 || 1)
в большинстве других языков. Это, конечно, не имеет смысла. То, что вы ищете,
(member 1 '(3 2 1) :test #'=)
По умолчанию MEMBER
выглядит для конкретного объекта с помощью EQL
. Это работает для примитивов, таких как целые числа, но это не будет работать для строк или смешанных целых чисел и плавающих элементов. Вы должны использовать аргумент-ключ для :TEST
, чтобы указать правильную функцию сравнения для любого типа ваших элементов.
(member 1.0 '(3 2.0 1) :test #'=) ; numeric
(member "fOo" '("foo" "FOO" "fOo") :test #'string=) ; case-sensitive
(member "foo" '("FOO" "BAR" "QUUX") :test #'string-equal) ; case-insensitive
ИЛИ возвращает первое истинное значение. Что равно 3. 3 никогда не равно 1. Вы можете сказать нам, что вы хотите сделать. Что означает «правильно»? –
То, что вы сейчас делаете, похоже на '1 == (3 || 2 || 1)' на большинстве других языков. Это, конечно, не имеет смысла. Я предполагаю, что вы ищете '(член 1 '(3 2 1): test #' =)'. – jkiiski
Он работает с целыми числами, но не работает со списком строк. ex: '(член« TAG »'(« TAA »« TAG »))' –