Common Lisp
lisp吧
全部回复
仅看楼主
level 2
请问CL里面,
setf
let
defparameter
defvar
分别是干什么的?
也就知道def开头的2个是定义(声明?)全局(动态?)变量
具体区别是什么阿?
2015年02月10日 08点02分 1
level 1
setf是赋值
let是定义局部变量
defvar是定义全局变量
(defvar *a* 1)
(let ((b *a*)) ...)
(setf *a* 2)
2015年02月12日 07点02分 2
但是在没有用defvar或者defparameter之前使用setf给一个变量赋值也没有报错(lispbox的集成环境)?所以setf不会仅仅是赋值吧?
2015年02月14日 17点02分
@利万家家具By 这个我不确定,我也刚学不久,我用setf基本都是赋值的
2015年02月15日 00点02分
回复
ʫ������
:我也是新手,所以不太确定,来问问。结果这个吧好像没几个人。
2015年02月16日 00点02分
level 4
赋值以后也就自动声明了这个变量,所以用过了就不用defvar了。setq可以用来给变量赋值,而setf不仅可以给变量赋值,还可以给结构中的元素赋值。let可以让某个变量暂时地绑定到一个值,语句完毕后就自动还原。defvar可以声明一个特化变量,例子如下:
(setq arg 3)
(defun screen () arg)
(let ((arg 4)) (screen))
虽然在前一句中,将arg暂时绑定到了4,但是返回的值仍然是3.
(defvar arg 3)
(defun screen () arg)
(let ((arg 4)) (screen))
换成defvar后,返回的值就是4了。
2015年02月23日 02点02分 3
1