Common lisp 使用defuns更改全局变量
Common lisp 使用defuns更改全局变量,common-lisp,Common Lisp,有没有办法在公共lisp change全局变量中进行定义?在下面的示例中,是否有任何方法可以使foo在函数内部具有值3 这个例子来自sbcl (def参数foo“foo”) 福 福 “福” (除油杆(y) (宣布(特别y)) (打印y) (setf y 3) (打印y)) 酒吧 (巴富) “foo” 3 3 福 “foo”是的。您可以使用setf()设置所有变量的值,包括全局变量。例如: (defparameter foo "foo") ; => FOO (defun
有没有办法在公共lisp change全局变量中进行定义?在下面的示例中,是否有任何方法可以使foo在函数内部具有值3 这个例子来自sbcl
- (def参数foo“foo”)
- 福
(除油杆(y) (宣布(特别y)) (打印y) (setf y 3) (打印y))
- (巴富)
3
3
- 福
“foo”是的。您可以使用
setf
()设置所有变量的值,包括全局变量。例如:
(defparameter foo "foo") ; => FOO
(defun bar () (setf foo 3)) ; => BAR
foo ; => "foo"
(bar) ; => 3
foo ; => 3
函数未更改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
请注意,这并不一定要设置全局变量,但是:
(defparameter baz 1)
(let ((baz 2))
baz ; => 2
(bar 'baz)
baz) ; => 3
baz ; => 1
对。您可以使用
setf
()设置所有变量的值,包括全局变量。例如:
(defparameter foo "foo") ; => FOO
(defun bar () (setf foo 3)) ; => BAR
foo ; => "foo"
(bar) ; => 3
foo ; => 3
函数未更改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
请注意,这并不一定要设置全局变量,但是:
(defparameter baz 1)
(let ((baz 2))
baz ; => 2
(bar 'baz)
baz) ; => 3
baz ; => 1
那么有没有办法把一个全局变量传递给一个函数,然后让这个函数改变这个特定的全局参数呢?更新答案,有帮助吗?有帮助。谢谢你帮助我。如何通过价值传递和引用传递是一个常见的问题。此答案显示(设置sym值),当sym作为符号传递到函数中时,处理通过引用传递的问题,并允许函数修改传递的变量。(这里的评论帮助谷歌找到这个答案)。那么有没有办法把一个全局变量传递给一个函数,然后让这个函数改变那个特定的全局参数呢?更新答案,有帮助吗?有帮助吗。谢谢你帮助我。如何通过价值传递和引用传递是一个常见的问题。此答案显示(设置sym值),当sym作为符号传递到函数中时,处理通过引用传递的问题,并允许函数修改传递的变量。(这里的评论有助于谷歌找到这一回应)。