如何在Lisp中找到二维数组中元素的列索引?

时间:2011-11-28 11:12:06

标签: lisp common-lisp

我有一个2D数组,但是我可以找到存储在数组中的某个元素的列索引吗? 假设我要查找的元素存储在第2行,但我不知道它的列索引。但是我如何找到列索引?
例如,我有一个2D数组和一个元素列表,如

L = (A B C)

我知道“A”存储在数组的第2行中,现在我想在数组中找到“A”的列索引,所以我试过

(eval (first L))

但是出现了错误消息

The variable A is unbound.

谢谢。

2 个答案:

答案 0 :(得分:3)

这应该有效(对于名为*a*的数组):

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

移位数组就像现有数组的替代视图。此代码创建一个位移数组,该数组是一个查看数组第二行的向量,然后使用position查找该元素的索引。

答案 1 :(得分:0)

我认为任何内置函数都不能做到这一点。尝试这样的事情:

(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)))