Scheme 如何取消对方案符号的引用?

Scheme 如何取消对方案符号的引用?,scheme,symbols,dereference,Scheme,Symbols,Dereference,老C/C++程序员,我刚刚开始学习/玩scheme,所以我的措辞可能不正确,但 让我们假设我这样做: (define x 42) (define y (quote x)) 现在用y怎么去42号公路 我认为这相当于(在C术语中): 我想错了吗?如果不是的话,这个方案相当于*y吗?好的,用上面的评论回答我的问题 符号不是指针,但可以像指针一样使用 如何到达42的具体答案是使用 (eval y) 或者是狡诈(这就是我的工作) 请参阅@ex nihilo的评论,了解这一点的原因 我在网上找到了诡计的

老C/C++程序员,我刚刚开始学习/玩scheme,所以我的措辞可能不正确,但

让我们假设我这样做:

(define x 42)
(define y (quote x))
现在用y怎么去42号公路

我认为这相当于(在C术语中):


我想错了吗?如果不是的话,这个方案相当于*y吗?

好的,用上面的评论回答我的问题

符号不是指针,但可以像指针一样使用

如何到达42的具体答案是使用

(eval y)
或者是狡诈(这就是我的工作)

请参阅@ex nihilo的评论,了解这一点的原因

我在网上找到了诡计的版本

符号是什么是符号表中的条目。因此,绑定到符号的变量(本身是符号表中的一个条目)引用符号表中的另一个条目(在这方面与指针无关)。但是,所引用的符号在绑定到变量时不需要存在,但可以在以后定义,因为在对符号求值之前,链接不会解析。因此

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
不确定我会用后来的事实做什么,但仍然很有趣


感谢所有帮助我思考这个问题的人。

我仍处于学习计划的反复思考阶段。我确实理解scheme中没有像C中那样的固有类型,但是既然可以将符号赋给变量,就必须有一种方法来获取基础值,对吗?这不是符号的真正用途。让我们后退一步:为什么要这样做?研究这个实际问题将比试图完善这个不同寻常的解决方案更有成效。正如我所说,我正在开始学习计划的过程。当我读到有关符号的文章时,我觉得它们与指针类似,所以我尝试了上面的定义序列来测试理论,但我找不到任何方法来获取底层数据。所以,若我理解你们的响应符号和指针是不相似的,那个么在Scheme中并没有(明确的)指针,符号和指针一点也不像!符号只是不可变的字符串。那就从头开始吧。谢谢你
(eval y (interaction-environment))
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