 - (defun lambdafun(li / rl); 注意 / 后没有加入KK
- (setq kk 0)
- (setq rl (mapcar '(lambda (x)
- (setq kk (1+ kk))
- (list kk x)
- )
- li
- )
- )
- )
- (defun c:test(/ kk re) ; 注意 / 后加入了KK
- (setq kk -100)
- (setq rl '("A" "B" "C" "D")
- rl (lambdafun rl)
- )
- (princ KK)
- (princ)
- )
;;运行结果KK变成了4,如果lambdafun加入变量名称KK,就不会改变。
意思是lambdafun定义的函数与调用的主函数共享变量空间,我今天一个程序出错,查找了半天才偶然发现是这个原因,我是主程序调用子函数的子函数用到了lambdafun,恰好有个变量名相同又忘记了声明为局部变量。
|