【问题标题】:Printing ith row jth column value in lisp在lisp中打印第j行第j列值
【发布时间】:2015-06-03 16:42:31
【问题描述】:

我将输入 N 作为 lisp 中二维矩阵的行数,其中每行最多可以包含 5 个元素。所以我把它做成这样。现在对于每一行,因为它可以包含 0 到 5 之间的任意数量的元素。所以我制作了一个单独的数组来存储 2D 矩阵的每一行的大小,并在我将任何元素推入其中时递增它

(setq myMatrix (make-array (list N 5)))

(setq sizeArray (make-list N:initial-element 0))

现在,当我需要向任何行添加元素时,我会在该行具有最大元素或用户自己退出以在该行中输入更多元素时进行输入。要将元素添加到第 i 行,我会执行以下操作:

(setf (aref myMatrix i (nth i sizeArray)) "Hi")
// Hi is just for example here
(setf (nth i sizeArray) (+ 1 (nth i sizeArray))) 

现在我想打印这个 myMatrix 的第 i 行,像这样:

Item 1 : myMatrix[i][0]
Item 2 : myMatrix[i][1]..and so on

以直接方式,我想要第 i 行的第 j 个值。我们如何在 lisp 中得到这个?

【问题讨论】:

  • 首先,如果一行中的元素数量对于不同的行可以不同,那么它不是矩阵。您可能需要可扩展向量或列表的向量(5 并不是那么大的数字,因此您可以自己使用列表,实际上它甚至比基于向量的方法更快)。

标签: arrays multidimensional-array lisp clisp


【解决方案1】:

因为您使用的是列表数组,如何:

(defun element-of-matrix (matrix i j)
  (nth j (aref matrix i)))

【讨论】:

  • AREF 出现错误:得到 1 个下标,但 #2A(("A" "B" "C" NIL NIL) ("D" "E" NIL NIL NIL)) 排名为 2
  • 那么您使用的是数组数组,而不是列表数组:您只需要: (aref matrix i j) example > (setf a (make-array '(2 2))) #2A ((NIL NIL) (NIL NIL)) >(setf (aref a 1 1) "hello") "hello" >(aref a 1 1) "hello"
  • 那不是数组数组而是二维数组。
  • 确实是Svante,这是一个二维数组,我的错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
相关资源
最近更新 更多