拜托,有人可以解释一下为什么“make-array”对plant1没有影响吗?
(LET(plant1)((setq plant1(make-array'(4 4)))(print plant1)(setf(AREF PLANT1 0 0)1)))
NIL 错误:尝试在NIL上执行不是数组的数组操作。 [条件类型:TYPE-ERROR]
答案 0 :(得分:5)
(LET (plant1) ((setq plant1 (make-array '(4 4))) (print plant1) (setf (AREF PLANT1 0 0) 1)))
第一条规则:格式化代码。
(LET (plant1)
((setq plant1 (make-array '(4 4)))
(print plant1)
(setf (AREF PLANT1 0 0) 1)))
括号太多了。 let的语法有一个代码体,它是一系列形式。序列周围有括号,这是错误的。阅读LET的Common Lisp HyperSpec条目。它提到了语法。
使用:
(LET (plant1)
(setq plant1 (make-array '(4 4)))
(print plant1)
(setf (AREF PLANT1 0 0) 1))
与以下内容相同:
(LET ((plant1 (make-array '(4 4))))
(print plant1)
(setf (AREF PLANT1 0 0) 1))
答案 1 :(得分:0)
带上一粒盐,因为我主要处理Scheme,而不是Common Lisp。
让我们使用以下语法:
(let ((var1 2) (var2 7)) (+ var1 var2))
如果您只想定义一个变量......
(let ((var1 2)) ...);;Replace ... with whatever operations you do in that scope.
据我所知,你从未在let中定义了plant1,加上语法错误,所以一旦你尝试做套装,它就行不通了。当然,我可能完全错了,所以只能用它作为尝试的东西,直到有人知道他们正在谈论的内容。