Проверьте, находится ли массив внутри списка в lisp
У меня есть две вещи. Первый, a-child
, является списком, который содержит массив в качестве первого элемента, а затем несколько строк в качестве оставшихся элементов. Другой, mapped
, это список, который содержит несколько массивов. При осмотре легко увидеть, что a-child
в mapped
Хотя я не могу найти функцию, которая найдет ее для меня.
Я прошу прощения за плохой стиль LISP ниже - я начал несколько дней назад, поэтому я еще не собрал все соглашения.
(defparameter a-child (list (#2A((1 2 3) (7 4 5) (9 8 6))) "U" "R" "R"))
(defparameter mapped (list (#2A((1 2 3) (7 4 5) (9 8 6))) (#2A((1 2 3) (4 5 6) (7 8 9)))))
(find (car a-child) mapped) ;;returns NIL
(member (car a-child) mapped) ;;returns NIL
(position (car a-child) mapped) ;;returns NIL
(equalp (car a-child) (car mapped)) ;;returns T
Какую функцию я могу использовать для поиска массивов в списке массивов? Спасибо.
1 ответ
Ответ
Ваша последовательность функций с пометкой "вернет NIL" вернет T
если вы пройдете :test #'equalp
им.
Причина
Двухаргументный тест по умолчанию в Common Lisp - это eql
,
Это наиболее разумный выбор между 4(!) Функциями сравнения общего назначения, предусмотренными стандартом ANSI CL:
eq
слишком зависит от реализации и не работает так, как, вероятно, нужно для чисел и символовequal
а такжеequalp
Обходите объекты и, таким образом, занимает много времени для огромных и может никогда не закончиться для круглых.
Смотрите также разницу между eq, eql, equal и equalp в Common Lisp.