lisp - 为什么我的变量是 "undefined"?

标签 lisp

为什么我的变量 nodes 在 vector-push-extend 行中未定义?

(defun make_graph (strings)
  (defparameter nodes (make-array 0))
  (loop for x in strings do
       (vector-push-extend (make-instance 'node :data x) nodes))
n)

最佳答案

简短的回答是你应该使用 let 而不是 defparameter 来引入你的变量。例如:

(defun make_graph (strings)
  (let ((nodes (make-array 0)))
    (loop for x in strings do
          (vector-push-extend (make-instance 'node :data x) nodes))
    ;; your code says N here, but I assume that's a typo...
    nodes))  

defparameter 形式对于创建“特殊”变量很有用,这有点类似于其他编程语言中的全局变量。 (有一些差异,例如,defparameter 引入的特殊变量不完全是全局的——相反,它们是动态作用域的,并且可以被 let 绑定(bind),等等...)

无论如何,let 形式将创建一个局部变量。

关于lisp - 为什么我的变量是 "undefined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28467769/

相关文章:

unit-testing - 在 Racket 中对程序使用单元测试

macros - 初始内容由函数确定的数组

lisp - 子集求和问题和 NP 完全问题的可解性

lisp - AutoLISP:删除列表中的连续重复项

casting - 在 SICP 中创建强制程序

LISP - 小数点后的数字

scheme - call/cc 是这样模拟 goto 的吗?

lisp - 增加 Mac Common Lisp 5.0 中的最小堆栈溢出大小

lisp - Quicklisp 使用 sbcl : getting UNDEFINED-FUNCTION error when loading various libraries

scheme - Nil 不是空列表吗?