关于set、局部变量的定义。
setq定义的变量,我们直接可以设定为局部变量还是全局的。假若变量是由 set 定义的,这个变量符号不一定是固定的,改怎么设定局部变量呢?
论坛也找不到答案,谢谢!!
http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 bori的微博 本帖最后由 自贡黄明儒 于 2015-11-17 15:24 编辑
;是不是如下的意思?
http://bbs.mjtd.com/thread-170188-1-1.html中的cal_res,可以写成如下形式
(defun cal_res()
(mapcar 'set '(a b m n h) '("sda_name""sdb_name" "xda_name" "xdb_name" "GD_name"))
)(defun cal_res ()
(mapcar '(lambda (x y) (set x (strcat y "_name"))) '(a b m n h) '("sda" "sdb" "xda" "xdb" "GD"))
) 自贡黄明儒 发表于 2015-11-17 15:00 static/image/common/back.gif
;是不是如下的意思?
http://bbs.mjtd.com/thread-170188-1-1.html中的cal_res,可以写成如下形式
(defun ...
不完全是,这个set定义的是可寻的a b m n h。
比如这样:
(while (> i 0)
(set (read (strcat "tmp_" (rtos i))) "temp......")
(setq i (- i 1))
)
i 可能是任何数值。
这样定义的变量就会非常多,而我又想让这些变量是定义成局部变量(当然,不定义程序也可以运行,只是可能会窜掉),该如何写? bori 发表于 2015-11-17 15:26 static/image/common/back.gif
不完全是,这个set定义的是可寻的a b m n h。
比如这样:
先不说这样做是不是可行的,但肯定是不值得的,Lisp的精髓是表(根源也是表),你放着表不用,而舍本求末,“无限制地”定义变量(即使是局部变量),也是大量浪费资源,不如使用值为表的单个变量。
就问题来说,因为i我限制,所以变量名就是变化的,而局部变量的“声明”是在函数的首部,所以规则上是不允许的,但可以使用变通的方法,就是在本程序中,对使用过的变量名清徐内容(setq x nil)。
最后推荐一下我的签名中的《认识自定义函数》,或许能对你理解有点帮助。 ll_j 发表于 2015-11-17 16:20 static/image/common/back.gif
先不说这样做是不是可行的,但肯定是不值得的,Lisp的精髓是表(根源也是表),你放着表不用,而舍本求末 ...
认真拜读了你的文章,收获很大。
“Lisp的精髓是表(根源也是表),你放着表不用,而舍本求末”这句话给我启发很大,谢谢!
以前压根没想到过可以把变量名列表之后处理。
非常感谢!!!! 自贡黄明儒 发表于 2015-11-17 15:00 static/image/common/back.gif
;是不是如下的意思?
http://bbs.mjtd.com/thread-170188-1-1.html中的cal_res,可以写成如下形式
(defun ...
黄大师你不要吓我,GET_TILE 都没了是没法用的啊 可以这样用,但你还需要一个表来收集变量名,最后mapcar set nil ivde 发表于 2015-11-17 18:23:50 static/image/common/back.gif
可以这样用,但你还需要一个表来收集变量名,最后mapcar set nil
好,我之前是没想到用表收集变量名来处理,设置更改都是while,太笨了。谢谢! 好资料,学习了。
页:
[1]