Common lisp 如何在common Lisp中按顺序创建变量?

Common lisp 如何在common Lisp中按顺序创建变量?,common-lisp,parallel-processing,sequential,Common Lisp,Parallel Processing,Sequential,我在一个函数中有以下代码,该函数正在读取一个映射文件。我得到一个错误,*numrows*是非法维度。我认为这是因为lisp并行处理这些变量。我怎样才能解决这个问题 (setq *numrows* (read map)) (setq *numcols* (read map)) (setq *map* (make-array '(*numrows* *numcols*) :initial-element nil)) 你把问题误诊了。传递给MAKE-ARRAY的第一个参数是两个符号的列表,*NUMR

我在一个函数中有以下代码,该函数正在读取一个映射文件。我得到一个错误,
*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
  )

您是否已检查VAL是否按预期读取?我不确定我是否认为这是一个问题,我也不认为变量是如何处理的。