我在一个函数中有以下代码,该函数正在读取一个地图文件。我收到*numrows*
一个非法维度的错误。我认为这是因为 lisp 正在并行处理这些变量。我怎样才能解决这个问题?
(setq *numrows* (read map))
(setq *numcols* (read map))
(setq *map* (make-array '(*numrows* *numcols*) :initial-element nil))
我在一个函数中有以下代码,该函数正在读取一个地图文件。我收到*numrows*
一个非法维度的错误。我认为这是因为 lisp 正在并行处理这些变量。我怎样才能解决这个问题?
(setq *numrows* (read map))
(setq *numcols* (read map))
(setq *map* (make-array '(*numrows* *numcols*) :initial-element nil))
你误诊了问题。您传递给 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
)