2010-08-21 79 views
1

请问有人能解释为什么“make-array”对plant1没有任何影响吗?为什么plant1保持NIL?

(LET (plant1) ((setq plant1 (make-array '(4 4))) (print plant1) (setf (AREF PLANT1 0 0) 1)))

NIL Error: Attempt to do an array operation on NIL which is not an array. [condition type: TYPE-ERROR]

回答

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)) 
0

带一粒盐,因为我主要是处理Scheme,而不是Common Lisp。

让我们使用以下语法:

(let ((var1 2) (var2 7)) (+ var1 var2)) 

如果你只是想定义一个变量...

(let ((var1 2)) ...);;Replace ... with whatever operations you do in that scope. 

从我可以告诉,你永远不会在咱们定义plant1,加语法是错误的,所以一旦你尝试设置,它不起作用。当然,我可能是完全错误的,所以只能用这个东西来尝试,直到有人知道他们正在谈论编钟。

相关问题