Jef*_*eff 11 symbols common-lisp
我正在尝试获取一个字符串,并将其转换为变量名称.我虽然(make-symbol)或(实习生)会这样做,但显然它不是我想要的,或者我错误地使用它.
例如:
> (setf (intern (string "foo")) 5)
> foo
5
Run Code Online (Sandbox Code Playgroud)
在这里,我将尝试创建一个名为'foo'的变量,其值为5.除此之外,上面的代码给出了一个错误.我正在寻找什么命令?
WRe*_*ach 13
这里有很多事情需要考虑:
SETF没有评估它的第一个参数.它需要一个符号或表单来指定要更新的位置.请SET改用.
根据Common Lisp实现的复古和设置,符号名称可能默认为大写.因此,第二个引用foo实际上可以指代名称为的符号"FOO".在这种情况下,您需要使用(intern "FOO").
调用STRING是无害的,但如果值已经是字符串则不必要.
把它们放在一起,试试这个:
> (set (intern "FOO") 5)
> foo
5
Run Code Online (Sandbox Code Playgroud)
使用:
CL-USER 7 > (setf (SYMBOL-VALUE (INTERN "FOO")) 5)
5
CL-USER 8 > foo
5
Run Code Online (Sandbox Code Playgroud)
这也适用于变量:
CL-USER 11 > (let ((sym-name "FOO"))
(setf (SYMBOL-VALUE (INTERN sym-name)) 3))
3
CL-USER 12 > foo
3
Run Code Online (Sandbox Code Playgroud)
还要记住,默认情况下,符号在内部创建为大写.如果要通过字符串访问符号,则必须使用大写字符串.
| 归档时间: |
|
| 查看次数: |
3855 次 |
| 最近记录: |