旧的C/C++程序员,我刚刚开始学习/玩scheme,所以我的措辞可能不正确,但。。。
假设我愿意:
(define x 42)
(define y (quote x))
现在用y怎么到42?
我认为这相当于(用C术语(:
int x=42;
int* y=&x;
我想错了吗?如果不是,那么与*y等效的方案是什么?
好的,用上面评论的输入来回答我的问题。。。
符号是而不是指针,但可以像指针一样使用。
如何到达42的具体答案是使用
(eval y)
或者在狡诈中(这就是我正在处理的(
(eval y (interaction-environment))
请参阅@ex-nihilo的评论,了解为什么这样做有效。
我在How do I evaluate a symbol return from a function in Scheme中找到了狡猾的版本?
符号是符号表中的条目。一个绑定到符号的变量(本身是符号表中的一个条目(因此引用了符号表中另一个条目(在这方面类似于指针(。然而,引用的符号在绑定到变量时不必存在,但可以稍后定义,因为在评估符号之前,链接不会被解析。因此
scheme@(guile-user)> (define z 'r)
scheme@(guile-user)> z
$1 = r
scheme@(guile-user)> (eval z (interaction-environment))
ERROR: In procedure memoize-variable-access!:
ERROR: Unbound variable: r
Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
scheme@(guile-user) [1]> ,q
scheme@(guile-user)> (define r #t)
scheme@(guile-user)> (eval z (interaction-environment))
$2 = #t
不确定我会用后来的事实做什么,但有趣的是。
感谢所有帮助我理解这一点的人。