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是否按预期读取?我不确定我是否认为这是一个问题,我也不认为变量是如何处理的。