【发布时间】:2010-08-21 21:04:50
【问题描述】:
请问,有人能解释一下为什么“make-array”对植物 1 没有影响吗?
(LET (plant1) ((setq plant1 (make-array '(4 4))) (print plant1) (setf (AREF PLANT1 0 0) 1)))
无 错误:尝试对不是数组的 NIL 执行数组操作。 [条件类型:TYPE-ERROR]
【问题讨论】:
标签: lisp
请问,有人能解释一下为什么“make-array”对植物 1 没有影响吗?
(LET (plant1) ((setq plant1 (make-array '(4 4))) (print plant1) (setf (AREF PLANT1 0 0) 1)))
无 错误:尝试对不是数组的 NIL 执行数组操作。 [条件类型:TYPE-ERROR]
【问题讨论】:
标签: lisp
(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))
【讨论】:
对此持保留态度,因为我主要处理的是 Scheme,而不是 Common Lisp。
让我们使用以下语法:
(let ((var1 2) (var2 7)) (+ var1 var2))
如果你只想定义一个变量...
(let ((var1 2)) ...);;Replace ... with whatever operations you do in that scope.
据我所知,你从来没有在 let 中定义过 plant1,而且语法错误,所以一旦你尝试做集合,它就不起作用了。当然,我可能完全错了,所以只能用这个来尝试,直到有人知道他们在说什么。
【讨论】: