sharkyurui 发表于 2016-1-14 15:36:56

Lisp中能否将字符串作为变量名来执行

比如说变量a=1,变量b="a"。也就是字符串b存储的是变量a的名称。
我想能不能通过b来获得1(a的值)。很多脚本编程的语言都可以的。

实现这个功能的目的主要是用来从ini文件里面提取和保存参数的。
我想把变量名做成一个名列表(list "变量名1" "变量名2" "变量名3"……),
从ini中读取出的字符串也转换成值列表,然后赋值就方便了,不需要每一个变量去单独一个语句赋值。

陨落 发表于 2016-1-14 16:40:58

用read+set即可

ll_j 发表于 2016-1-14 16:44:47

可以但不值得,熟悉Lsp以后会发现,用表更灵活。
建议下载我的签名中的《认识自定义变量》看看,或许会有帮助。

sharkyurui 发表于 2016-1-14 21:21:47

陨落 发表于 2016-1-14 16:40 static/image/common/back.gif
用read+set即可

多谢提示,解决了。主要是要加上read,然后用set或者用eval也可以

sharkyurui 发表于 2016-1-14 21:25:41

ll_j 发表于 2016-1-14 16:44 static/image/common/back.gif
可以但不值得,熟悉Lsp以后会发现,用表更灵活。
建议下载我的签名中的《认识自定义变量》看看,或许会有帮 ...

我就是想用列表来实现赋值,否则就需要用很多行(setq 变量1 值1)来赋值了。现在可以直接在repeat中用:
(set (read (nth n varlist)) (nth n valuelist))来解决这个问题。
多谢回复~

xyp1964 发表于 2016-1-14 21:37:45

(mapcar 'set '(a b c) '(1 2 3))

sharkyurui 发表于 2016-1-15 12:01:34

xyp1964 发表于 2016-1-14 21:37 static/image/common/back.gif
(mapcar 'set '(a b c) '(1 2 3))

多谢提醒,这样可以不用repeat了。不过set必须要配合read才行。
这样写就好了:(mapcar '(lambda (x y) (set (read x) y)) '(a b c) '(1 2 3))
页: [1]
查看完整版本: Lisp中能否将字符串作为变量名来执行