LISP 6.3 动态变量

举报
wh_bn 发表于 2021/12/15 22:32:14 2021/12/15
【摘要】 词法绑定与赋予新值仅会影响当前作用域 词法绑定案例 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。