写了个变量表进行清空的函数,但始终有个变量无法清空?!
本帖最后由 wowan1314 于 2014-8-2 18:49 编辑情况 如题!
T11是变量表清空函数!(defun t11 (lst) (mapcar ''((x)(set x nil)) lst))下面是测试程序!(defun c:t12 ()
(defun t11 (lst) (mapcar ''((x)(set x nil)) lst))
(setq a1 1 b2 2 c3 3 lst '(a1 b2 c3))
(t11 lst)
(princ a1)
(princ b1)
(princ c1)
(princ lst)
(princ)
)问题:
1、其中lst无法清空,估计是因为要清空的变量与T11函数里的重复了,所以无法清空。为什么呢?
2、在不改变lst这个名称的情况下,只修改T11如何能达到我要的效果??
(defun c:t12 ()
(defun t11 (lst) (mapcar ''((x)(set x nil)) lst))
(setq a1 1 b2 2 c3 3 lst '(a1 b2 c3))
(t11 lst)
(setq tl1 nil)
(princ a1)
(princ b1)
(princ c1)
(princ lst)
(princ)
) 这个行么?
(defun t11 (lst1) (mapcar ''((x) (set x nil))(cons (read "lst") lst1))) 看来还是把t11函数里面的lst改个不会用到的变量名吧! _$ (defun c:t12 ()
(defun t11 (lst1) (mapcar ''((x)(set x nil)) lst1))
(setq a1 1 b2 2 c3 3 lst '(a1 b2 c3 lst))
(t11 lst)
(princ a1)
(princ b1)
(princ c1)
(princ lst)
(princ lst1)
(princ)
)
C:T12
_$ (c:t12)
nilnilnilnilnil
_$ 这个好像不行,同名无法清空,清空只能在T12中清空lst。 个人理解,函数参数名和变量重复的时候,使得该变量成了内部全局变量,而用T11函数的lst是局部变量,能清空,但是不能影响全局变量的lst。因此,解决的方式是在T12中清空lst。
局部变量,全局变量,内部全局变量,这是个值得研究的问题,虽然我有时用这种方式,但是没有深究。
===
忽然想到一点,如果你打开了一个文件,然后执行删除操作,windows会提示你文件在使用,而无法删除。 (defun c:t12 ()
(defun t11 ()
(mapcar ''((x)(set x nil)) lst)
(setq lst nil)
)
(setq a1 1 b2 2 c3 3 lst '(a1 b2 c3))
(t11)
(princ a1)
(princ b1)
(princ c3)
(princ lst)
(princ)
) 本帖最后由 wowan1314 于 2014-8-2 23:05 编辑
这个形象!文件使用中,无法清空!
其实你看t11的运行情况!它清空lst了!
只不过清空的是t11里面的lst,而没有清空t12里面的
变量名相同情况下!函数优先提拔自己人! nzl1116 发表于 2014-8-2 22:22 static/image/common/back.gif
兄弟这样处理,其本质是不让同名!
看来同名情况下是无法处理了!
目前我把t11里面的lst改为 *琴瑟琵琶*
一般情况应该不会同名了!
页:
[1]
2