Как найти индекс столбца элемента в двумерном массиве в Лиспе? - PullRequest
1 голос
/ 28 ноября 2011

У меня есть двумерный массив, но могу ли я найти индекс столбца определенного элемента, хранящегося в массиве?
Предположим, что искомый элемент хранится в строке 2, но я не знаю его индекс столбца,Но как мне найти индекс столбца?
Например, у меня есть двумерный массив и список элементов, таких как

L = (A B C)

, и я знаю, что «A» хранится в строке 2 в массиве, и теперь я хочу найтииндекс столбца для «A» в массиве, поэтому я попытался

(eval (first L))

, но было дано сообщение об ошибке

The variable A is unbound.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 29 ноября 2011

Это должно работать (для массива с именем *a*):

(position 'a
          (make-array (array-dimension *a* 1)
                      :displaced-to *a*
                      :displaced-index-offset (array-row-major-index *a* 2 0)))

Смещенный массив похож на альтернативное представление существующего массива.Этот код создает смещенный массив, представляющий собой вектор, который смотрит на вторую строку массива, а затем использует position, чтобы найти индекс элемента в нем.

0 голосов
/ 28 ноября 2011

Я не думаю, что какая-либо встроенная функция может сделать это. Попробуйте что-то вроде этого:

(defun column-position (array row item &key (test #'eql))
  (loop for i below (array-dimension array 1)
        when (funcall test (aref array row i) item)
        do (return i)))
...