scheme - 如何评估从 Scheme 中的函数返回的符号?

标签 scheme symbols evaluation guile

我正在重新熟悉 Scheme,我遇到了一个问题,这可能反射(reflect)了我的根本误解。

假设我在 Scheme 中执行以下操作(在这种情况下使用 Guile,但在 Chicken 中也是如此):

> (define x 5)
> x
5
> (string->symbol "x")
x
> (+ 5 (string->symbol "x"))
<unnamed port>:45:0: In procedure #<procedure 1b84960 at <current input>:45:0 ()>:
<unnamed port>:45:0: In procedure +: Wrong type: x
> (symbol? (string->symbol "x"))
#t
> (+ 5 x) ; here x is dereferenced to its value 5
10
> (+ 5 'x) ; here x is not dereferenced
<unnamed port>:47:0: In procedure #<procedure 1c7ba60 at <current input>:47:0 ()>:
<unnamed port>:47:0: In procedure +: Wrong type: x    

我明白 string->symbol正在返回一个符号,x ,这是有效引用。但是,我不知道如何使用 string->symbol 返回的符号。在以后的任何上下文中。我怎样才能让 Scheme 评估那个符号?

为了说明我为什么要这样做的背景,我正在编写一个带有嵌入式 Guile 的 C 程序。我希望能够通过 C 中的名称访问 Guile 中定义的符号,例如使用 scm_from_*_symbolscm_string_to_symbol .这些功能没有按照我认为的方式工作的原因与我上面的核心问题有关。也许有更好的方法来做我想用 Guile 做的事情,但这是一个不同的问题。现在我对上面的基本问题感兴趣。

最佳答案

您想要的是评估符号(而不是“取消引用”它)。我想这就是你的意思:

(define x 5)
(+ 5 (eval 'x (interaction-environment)))
=> 10

看看documentation了解更多详情。

关于scheme - 如何评估从 Scheme 中的函数返回的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873043/

相关文章:

scheme - 如何在 Racket 列表中添加

ruby-on-rails - 关于 Symbol 对象的 Ruby 文档具有误导性

lisp - 有没有办法将列表转换为 Scheme 中的集合?

multithreading - Racket 中的公平线程调度程序时基

C 仅导出所需符号(不编辑原始文件)

haskell - Haskell 中函数 makeSum 的求值顺序

r - 如何在 R 函数中返回数据变量?

prolog - Prolog 中如何解释匿名变量?

graph - 如何从方案中的图中删除节点?

python - 仅符号字符串检测