LISP 6.3 动态变量
【摘要】
词法绑定与赋予新值仅会影响当前作用域
词法绑定案例
CL-USER> (defvar *x* 10)
*X*
CL-USER> (defun foo()
(format t "x:~a~%" *x*))
FOO
CL-USER> (foo)
x:10
NIL
CL-USER> (...
词法绑定与赋予新值仅会影响当前作用域
词法绑定案例
CL-USER> (defvar *x* 10)
*X*
CL-USER> (defun foo()
(format t "x:~a~%" *x*))
FOO
CL-USER> (foo)
x:10
NIL
CL-USER> (defun bar()
(foo)
(let ((*x* 20)) (foo))
(foo))
BAR
CL-USER> (bar)
x:10
x:20
x:10
NIL
赋予新值案例
;;;修改foo函数之后再次执行
CL-USER> (defun foo()
(format t "Before assignment~18tX:~d~%" *x*)
(setf *x* (+ 1 *x*))
(format t "After assignment~18tX:~d~%" *x*))
FOO
CL-USER> (foo)
Before assignment X:10
After assignment X:11
NIL
CL-USER> (bar)
Before assignment X:11
After assignment X:12
Before assignment X:20
After assignment X:21
Before assignment X:12
After assignment X:13
NIL
对作用域的案例测试
注:
(rotatef a b) 将两个变量值互换
(shiftf a b 10)值向左移动
1与2进行对比
1.
CL-USER> (defun foo(a b)
(let ((a 2) (b 5)))
(rotatef a b)
(format t "~a~t~a" a b))
;Compiler warnings :
; In FOO: Unused lexical variable B
; In FOO: Unused lexical variable A
FOO
CL-USER> (foo 3 7 )
7 3
NIL
2.
CL-USER> (defun foo(a b)
(let ((a 2) (b 5))
(rotatef a b)
(format t "~a~t~a" a b)))
;Compiler warnings :
; In FOO: Unused lexical variable B
; In FOO: Unused lexical variable A
FOO
CL-USER> (foo 3 7 )
5 2
NIL
CL-USER> (defun foo(a b)
(let ((a 2) (b 5))
(rotatef a b)
(format t "~a~t~a~%" a b)
(shiftf a b 10)
(format t "~a~t~a~%" a b)))
;Compiler warnings :
; In FOO: Unused lexical variable B
; In FOO: Unused lexical variable A
FOO
CL-USER> (foo 3 7 )
5 2
2 10
NIL
文章来源: blog.csdn.net,作者:fengda2870,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/fengda2870/article/details/9089829
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)