【问题标题】:Why does plant1 keep being NIL?为什么植物 1 一直为零?
【发布时间】: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


    【解决方案1】:
    (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))
    

    【讨论】:

      【解决方案2】:

      对此持保留态度,因为我主要处理的是 Scheme,而不是 Common Lisp。

      让我们使用以下语法:

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

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

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

      据我所知,你从来没有在 let 中定义过 plant1,而且语法错误,所以一旦你尝试做集合,它就不起作用了。当然,我可能完全错了,所以只能用这个来尝试,直到有人知道他们在说什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-02
        • 2019-06-01
        • 1970-01-01
        • 2019-05-30
        • 1970-01-01
        • 2017-07-26
        • 1970-01-01
        相关资源
        最近更新 更多