为什么我的变量 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/