作者:雨的到来2009 | 来源:互联网 | 2022-12-01 20:26
它在屏幕上打印1,即使我在功能中增加了它的值.有没有办法通过引用调用参数,所以我可以在函数调用后使用它?
(defparameter a 1)
(defun foo (x)
(+ x 1))
(foo a)
(print a)
Kaz..
6
您的代码不包含任何可以就地修改存储位置的运算符的跟踪.变量a
和变量都不会x
发生变异.
该函数foo
返回一个大于输入数字的数字1
.
注意a
并且x
是不同的变量; 如果我们要增加x
,那对你没有影响a
.
ANSI Lisp中的数字不是可变对象; 如果我们x
使用(incf x)
正在发生的变量增加一个变量(+ 1 x)
是计算该值,并将此新值存储回x
变量中.
与大多数主要的Lisp方言一样,ANSI Lisp函数参数使用"按值传递".当(foo a)
被调用时,参数表达式a
被降低到一个值:其产生的值1
.该值不再与变量相关联.它被传递到函数中而没有任何来自的记忆a
.在函数内部,x
实例化一个新函数,该函数是函数的本地变量; 这会收到一个参数值的副本:它被初始化为1
.所以x
与此无关a
; 它刚收到相同的价值.
1> Kaz..:
您的代码不包含任何可以就地修改存储位置的运算符的跟踪.变量a
和变量都不会x
发生变异.
该函数foo
返回一个大于输入数字的数字1
.
注意a
并且x
是不同的变量; 如果我们要增加x
,那对你没有影响a
.
ANSI Lisp中的数字不是可变对象; 如果我们x
使用(incf x)
正在发生的变量增加一个变量(+ 1 x)
是计算该值,并将此新值存储回x
变量中.
与大多数主要的Lisp方言一样,ANSI Lisp函数参数使用"按值传递".当(foo a)
被调用时,参数表达式a
被降低到一个值:其产生的值1
.该值不再与变量相关联.它被传递到函数中而没有任何来自的记忆a
.在函数内部,x
实例化一个新函数,该函数是函数的本地变量; 这会收到一个参数值的副本:它被初始化为1
.所以x
与此无关a
; 它刚收到相同的价值.