有没有办法在common-lisp中修改全局变量?在下面的例子中,有没有办法让foo从函数内部获得值3?
这个例子来自sbcl
FOO
"富"
(defun bar (y)
(declare (special y))
(print y)
(setf y 3)
(print y))酒吧
"foo"
3
3
"富"
是.您可以使用setf(此处记录)来设置所有变量的值,包括全局变量.例如:
(defparameter foo "foo") ; => FOO
(defun bar () (setf foo 3)) ; => BAR
foo ; => "foo"
(bar) ; => 3
foo ; => 3
Run Code Online (Sandbox Code Playgroud)
你的函数没有改变值的foo原因是因为你的setf表单设置的值y而不是foo.
编辑:
啊,我想我明白你想做什么了.您可以使用该set功能执行此操作; (setq alpha "beta")是(大致)相当于(set 'alpha "beta").所以,如果我们改变我们的功能使用set,我们得到:
(defparameter foo "foo")
(defun bar (sym) (set sym 3))
foo ; => "foo"
(bar 'foo)
foo ; => 3
Run Code Online (Sandbox Code Playgroud)
请注意,这不一定是设置全局变量:
(defparameter baz 1)
(let ((baz 2))
baz ; => 2
(bar 'baz)
baz) ; => 3
baz ; => 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1200 次 |
| 最近记录: |