scheme - 使用方案中的字符串获取变量值

标签 scheme lisp common-lisp

我们如何在方案语言中使用字符串获取变量值,因为我们可以在 Common Lisp 中实现这一点:

> (defvar s 3) 
> S
> (symbol-value (intern "S"))
> 3

我正在从闭包访问父函数的参数。

编辑:我找到了这个解决方案,但我不能使用 eval,因为它在顶层进行评估。寻找替代方案。

(eval (string->symbol "s"))

编辑 2: 我发现 Common lisp 代码也尝试在全局空间中查找符号。所以这个问题基本上是针对两种Lisps(Common Lisp, Scheme)的。

最佳答案

不要那样做!

变量用于在编译时知道变量的情况。在这种情况下,它从不 是一个字符串。您仍然可以在编译时推理字符串,但您的代码还需要与名称有关系才能使它有趣。当您使用 eval 或其他在运行时评估结构和编译/运行数据的形式时,您可能做得不对(但并非总是如此。我在 20 年的职业生涯中使用过 eval 故意在生产代码中两次)

如果你想存储值,你可以使用数据结构。一个 assoc 会模仿动态环境。如果大小无害,您还可以使用带有级别指示器的散列。

关于scheme - 使用方案中的字符串获取变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47552006/

相关文章:

lisp - call-with-current-continuation 只能用 lambda 和闭包来实现吗?

macros - 在 Scheme 中添加宏

scheme - 在 Racket 中的宏扩展期间评估表单

scheme - 如何在 Scheme 中列出评估的所有中间步骤

lisp - Common Lisp 中的列表和成员实现

package - Common Lisp 包定义

data-structures - 无限数据结构有哪些引人注目的用例?

functional-programming - 方案模式检查它是否是一个数字

lisp,赋值函数的差异

lisp - 加载函数库的最佳方式