Jos*_*ren 2 parallel-processing common-lisp sequential
我在一个函数内部有以下代码,该函数正在读取一个映射文件.我收到一个*numrows*
非法的错误.我认为这是因为lisp正在并行处理这些变量.我怎样才能解决这个问题?
(setq *numrows* (read map))
(setq *numcols* (read map))
(setq *map* (make-array '(*numrows* *numcols*) :initial-element nil))
Run Code Online (Sandbox Code Playgroud)
你错误地认识了这个问题.您传递给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))
Run Code Online (Sandbox Code Playgroud)
但是你通常不会像这样使用setq.根据上下文,将这些变量与LET*绑定可能会更好:
(let* ((numrows (read map))
(numcols (read map))
(map-array (make-array (list numrows numcols) :initial-element nil))
; do something with map-array
)
Run Code Online (Sandbox Code Playgroud)