wowan1314 发表于 2014-8-2 18:47:29

写了个变量表进行清空的函数,但始终有个变量无法清空?!

本帖最后由 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如何能达到我要的效果??

ZZXXQQ 发表于 2014-8-2 20:17:35

(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)
)

langjs 发表于 2014-8-2 20:21:32

这个行么?
(defun t11 (lst1) (mapcar ''((x) (set x nil))(cons (read "lst") lst1)))

wowan1314 发表于 2014-8-2 21:15:00

看来还是把t11函数里面的lst改个不会用到的变量名吧!

edata 发表于 2014-8-2 21:29:42

_$ (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
_$

edata 发表于 2014-8-2 21:45:11

这个好像不行,同名无法清空,清空只能在T12中清空lst。

edata 发表于 2014-8-2 22:11:26

个人理解,函数参数名和变量重复的时候,使得该变量成了内部全局变量,而用T11函数的lst是局部变量,能清空,但是不能影响全局变量的lst。因此,解决的方式是在T12中清空lst。
局部变量,全局变量,内部全局变量,这是个值得研究的问题,虽然我有时用这种方式,但是没有深究。
===
忽然想到一点,如果你打开了一个文件,然后执行删除操作,windows会提示你文件在使用,而无法删除。

nzl1116 发表于 2014-8-2 22:22:56

(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 22:55:25

本帖最后由 wowan1314 于 2014-8-2 23:05 编辑

这个形象!文件使用中,无法清空!
其实你看t11的运行情况!它清空lst了!
只不过清空的是t11里面的lst,而没有清空t12里面的
变量名相同情况下!函数优先提拔自己人!

wowan1314 发表于 2014-8-2 23:00:50

nzl1116 发表于 2014-8-2 22:22 static/image/common/back.gif


兄弟这样处理,其本质是不让同名!

看来同名情况下是无法处理了!

目前我把t11里面的lst改为 *琴瑟琵琶*

一般情况应该不会同名了!
页: [1] 2
查看完整版本: 写了个变量表进行清空的函数,但始终有个变量无法清空?!