【发布时间】:2015-06-02 14:40:51
【问题描述】:
我想在 Lisp 中有一个二维数组。但是每一行可以有不同数量的元素(最多 5 个)。所以我想维护另一个列表来存储每行的当前大小,并在需要时更新它们。
所以,我的代码是这样的:
(setq N (read))
(setq myMatrix (make-array (list N 5)))
(setq sizeArray (make-array N:fill-pointer N))
(dotimes (i N)
(setf (aref sizeArray i) 0)
)
现在我有一个循环来填充每行的元素,如下所示:
(dotimes (i N)
//Here I need to take input in each row until user presses -1.It is sure he can't insert more than 5 items in each row.
)
如何做到这一点?请帮忙。我尝试过这样的事情:
(setq item (read-line))
(setf (aref myMatrix i (nthcdr i sizeArray)) item)
但是没有用。
【问题讨论】:
-
哪方面没用?无论如何,与其使用二维数组并跟踪每行中的元素数量,我认为用一些虚拟值填充未使用的位置会更容易(例如
-1或@987654325 @),或使用向量的向量。 -
Nthcdr适用于列表,而不适用于数组。我想你想要(aref size-array i)那里。 -
N:fill-pointer是包n中的符号fill-pointer。我认为你在那里缺少一个空间。 -
请注意,默认的 readtable 会大写它读取的所有内容,因此驼峰式大小写没有任何意义。
-
另外,
//不引入评论。行 cmets 以一个或多个;开头。
标签: common-lisp clisp