5 evaluation scheme symbols guile
我正在重新熟悉计划,并且遇到了一个问题,这可能反映了我的根本误解。
假设我在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
Run Code Online (Sandbox Code Playgroud)
据我所知,string->symbol返回一个符号,x它被有效引用。但是,我无法弄清楚如何string->symbol在以后的上下文中使用返回的符号。我怎样才能让Scheme评估该符号?
为了说明我为什么要这样做的背景,我正在编写一个嵌入 Guile 的 C 程序。我希望能够通过 C 的名称访问 Guile 中定义的符号,例如使用scm_from_*_symbol或scm_string_to_symbol。这些功能没有按照我想象的方式工作的原因与我上面的核心问题有关。也许有更好的方法来完成我想要用 Guile 做的事情,但这是另一个问题了。现在我对上面的基本问题感兴趣。
您应该阅读Guile 文档的“fly-evaluation”一章。
你想要eval并且可能interaction-environment
我建议阅读著名的SICP和 Queinnec 的Lisp In Small Pieces