LISP 6.3 动态变量

本文通过实例分析了词法绑定与赋予新值如何仅影响当前作用域,包括变量修改和作用域测试等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


词法绑定与赋予新值仅会影响当前作用域


词法绑定案例

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


dxinl@dxinl-NUC13VYKi5:~/Fast-Drone-250$ catkin_make Base path: /home/dxinl/Fast-Drone-250 Source space: /home/dxinl/Fast-Drone-250/src Build space: /home/dxinl/Fast-Drone-250/build Devel space: /home/dxinl/Fast-Drone-250/devel Install space: /home/dxinl/Fast-Drone-250/install #### #### Running command: "make cmake_check_build_system" in "/home/dxinl/Fast-Drone-250/build" #### #### #### Running command: "make -j16 -l16" in "/home/dxinl/Fast-Drone-250/build" #### [ 0%] Built target geometry_msgs_generate_messages_nodejs [ 0%] Built target geometry_msgs_generate_messages_py [ 0%] Built target geometry_msgs_generate_messages_lisp [ 0%] Built target geometry_msgs_generate_messages_eus [ 0%] Built target geometry_msgs_generate_messages_cpp [ 4%] Built target camera_models make[2]: *** 没有规则可制作目标“/usr/lib/x86_64-linux-gnu/libvtkCommonCore-7.1.so.7.1p.1”,由“/home/dxinl/Fast-Drone-250/devel/lib/map_generator/random_forest” 需求。 停止。 [ 7%] Built target libGeographiccc [ 9%] Built target Calibrations make[1]: *** [CMakeFiles/Makefile2:3007:uav_simulator/map_generator/CMakeFiles/random_forest.dir/all] 错误 2 make[1]: *** 正在等待未完成的任务.... [ 10%] Built target plan_env [ 11%] Built target obj_generator [ 11%] Built target pose_utils [ 11%] Built target _decomp_ros_msgs_generate_messages_check_deps_Ellipsoid [ 11%] Built target nav_msgs_generate_messages_eus [ 11%] Built target _decomp_ros_msgs_generate_messages_check_deps_PolyhedronArray [ 11%] Built target _decomp_ros_msgs_generate_messages_check_deps_Polyhedron [ 11%] Built target _decomp_ros_msgs_generate_messages_check_deps_EllipsoidArray [ 11%] Built target _quadrotor_msgs_generate_messages_check_deps_AuxCommand [ 11%] Built target _quadrotor_msgs_generate_messages_check_deps_TRPYCommand [ 11%] Built target _quadrotor_msgs_generate_messages_check_deps_StatusData [ 11%] Built target _quadrotor_msgs_generate_messages_check_deps_Odometry make: *** [Makefile:141:all] 错误 2 Invoking "make -j16 -l16" failed dxinl@dxinl-NUC13VYKi5:~
最新发布
03-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值