2

我在一个函数中有以下代码,该函数正在读取一个地图文件。我收到*numrows*一个非法维度的错误。我认为这是因为 lisp 正在并行处理这些变量。我怎样才能解决这个问题?

(setq *numrows* (read map))
(setq *numcols* (read map))
(setq *map* (make-array '(*numrows* *numcols*) :initial-element nil))
4

1 回答 1

7

你误诊了问题。您传递给 MAKE-ARRAY 的第一个参数是两个符号的列表,*NUMROWS* 和 *NUMCOLS*。但是,MAKE-ARRAY 的第一个参数应该是一个非负整数列表。修复示例的最简单方法是使用创建一个列表:(list *numrows* *numcols*)。所以代码看起来像这样:

(setq *numrows* (read map))
(setq *numcols* (read map))
(setq *map* (make-array (list *numrows* *numcols*) :initial-element nil))

不过,您通常不会像这样使用 setq 。根据上下文,将这些变量与 LET* 绑定可能会更好:

(let* ((numrows (read map))
       (numcols (read map))
       (map-array (make-array (list numrows numcols) :initial-element nil))
  ; do something with map-array
  )
于 2010-10-04T00:03:41.890 回答