明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3014|回复: 8

[已解答] 关于set、局部变量的定义。

[复制链接]
发表于 2015-11-17 14:00:10 | 显示全部楼层 |阅读模式
setq定义的变量,我们直接可以设定为局部变量还是全局的。

假若变量是由 set 定义的,这个变量符号不一定是固定的,改怎么设定局部变量呢?

论坛也找不到答案,谢谢!!


该贴已经同步到 bori的微博
发表于 2015-11-17 15:00:27 | 显示全部楼层
本帖最后由 自贡黄明儒 于 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"))
)
  1. (defun cal_res ()
  2.   (mapcar '(lambda (x y) (set x (strcat y "_name"))) '(a b m n h) '("sda" "sdb" "xda" "xdb" "GD"))
  3. )
 楼主| 发表于 2015-11-17 15:26:36 | 显示全部楼层
自贡黄明儒 发表于 2015-11-17 15:00
;是不是如下的意思?
http://bbs.mjtd.com/thread-170188-1-1.html中的cal_res,可以写成如下形式
(defun ...

不完全是,这个set定义的是可寻的a b m n h。

比如这样:
  1. (while (> i 0)
  2.   (set (read (strcat "tmp_" (rtos i))) "temp......")
  3.   (setq i (- i 1))
  4. )


i 可能是任何数值。
这样定义的变量就会非常多,而我又想让这些变量是定义成局部变量(当然,不定义程序也可以运行,只是可能会窜掉),该如何写?
发表于 2015-11-17 16:20:04 | 显示全部楼层
bori 发表于 2015-11-17 15:26
不完全是,这个set定义的是可寻的a b m n h。

比如这样:

先不说这样做是不是可行的,但肯定是不值得的,Lisp的精髓是表(根源也是表),你放着表不用,而舍本求末,“无限制地”定义变量(即使是局部变量),也是大量浪费资源,不如使用值为表的单个变量。
就问题来说,因为i我限制,所以变量名就是变化的,而局部变量的“声明”是在函数的首部,所以规则上是不允许的,但可以使用变通的方法,就是在本程序中,对使用过的变量名清徐内容(setq x nil)。
最后推荐一下我的签名中的《认识自定义函数》,或许能对你理解有点帮助。
 楼主| 发表于 2015-11-17 16:45:14 | 显示全部楼层
ll_j 发表于 2015-11-17 16:20
先不说这样做是不是可行的,但肯定是不值得的,Lisp的精髓是表(根源也是表),你放着表不用,而舍本求末 ...

认真拜读了你的文章,收获很大。
“Lisp的精髓是表(根源也是表),你放着表不用,而舍本求末”这句话给我启发很大,谢谢!
以前压根没想到过可以把变量名列表之后处理。
非常感谢!!!!
发表于 2015-11-17 17:56:44 | 显示全部楼层
自贡黄明儒 发表于 2015-11-17 15:00
;是不是如下的意思?
http://bbs.mjtd.com/thread-170188-1-1.html中的cal_res,可以写成如下形式
(defun ...

黄大师你不要吓我,GET_TILE 都没了是没法用的啊
发表于 2015-11-17 18:23:50 来自手机 | 显示全部楼层
可以这样用,但你还需要一个表来收集变量名,最后mapcar set nil
 楼主| 发表于 2015-11-17 18:55:28 来自手机 | 显示全部楼层
ivde 发表于 2015-11-17 18:23:50
可以这样用,但你还需要一个表来收集变量名,最后mapcar set nil

好,我之前是没想到用表收集变量名来处理,设置更改都是while,太笨了。谢谢!来自: Android客户端
发表于 2020-12-16 09:46:33 | 显示全部楼层
好资料,学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-17 14:16 , Processed in 0.175371 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表