Проверьте, находится ли массив внутри списка в 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.

Другие вопросы по тегам