首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R7RS方案的反射能力

R7RS方案的反射能力
EN

Stack Overflow用户
提问于 2014-01-07 20:52:30
回答 1查看 634关注 0票数 3

关于编程语言方案的R7RS报告描述了在Scheme系统中运行Scheme代码的两种方法:

1)计划系统可以运行报告第5.1节所述的程序。

2)方案系统可以提供一个读-读-打印-循环,其中方案代码是交互解释的。

我的问题是,如何将这两种运行Scheme代码的方式反映在Scheme系统中,并将其包含在R7RS报告中。

在运行中的Scheme系统中,有eval库过程,它执行Scheme代码,因此eval看起来像我正在搜索的东西。

但是,我可以插入eval的唯一可以保证的可变环境是由interaction-environment repl库过程返回的环境。但是,使用这种方法,我无法从上面可靠地模拟REPL (第2点),因为REPL允许导入表单,而eval过程并不需要导入表单。

此外,由于其他原因,我不能使用交互环境对完整的eval程序进行处理:它通常不是空的,特别是它包含了(scheme base)的所有绑定。

为了在运行方案系统中实现1),eval库过程environment看起来很有希望,因为它允许预先导入库(这是运行程序的一部分)。但是,环境是不可变的,所以我不能在环境中评估define。一种解决方法是将要运行的程序主体封装为lambda形式,这样define就可以定义局部变量。但是,这也不起作用:在lambda表单中,所有定义都必须在主体的开头(对于Scheme程序的顶层不是这样),而在lambda表单库中的绑定可以在词汇上被覆盖,而顶级绑定是不可能的。

由于Scheme是图灵全的,我当然可以在正在运行的Scheme系统中模拟Scheme系统,但是我想知道使用eval过程是否有可能。我感兴趣的一个原因是eval可能会被优化(例如,通过JIT编译器后端),所以使用这个过程可能会给出接近本地速度的速度(与手工编写一个简单的解释器相比)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-10 03:28:17

R7RS-small并不打算用于这种反射实现。R7RS-large将提供一个支持用户创建的可变环境的库。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20981637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档