Mar*_*arc 3 reflection scheme eval read-eval-print-loop r7rs
关于编程语言Scheme的R7RS报告描述了在Scheme系统中运行Scheme代码的两种方法:
1)方案系统可以运行报告中第5.1节所述的程序.
2)方案系统可以提供read-eval-print-loop,其中交互式地解释Scheme代码.
我的问题是如何在Scheme系统中反映这两种运行Scheme代码的方式,以及R7RS报告中包含的内容.
有一个eval库过程eval
,它在一个正在运行的Scheme系统中执行Scheme代码,所以eval
看起来就像我在搜索的内容.
但是,我可以插入的唯一保证可变环境eval
是interaction-environment
repl库过程返回的环境.但是,有了这个,我无法可靠地模拟上面的REPL(第2点),因为REPL允许导入表单,而eval
程序不需要.
此外,eval
由于其他原因,我无法使用交互环境来完整的Scheme程序:它通常不为空,特别是它包含所有绑定(scheme base)
.
为了实现1)在运行的Scheme系统中,eval库过程environment
看起来很有前途,因为它允许事先导入库(这是运行程序的一部分).但是,环境是不可变的,所以我无法评估define
环境中的s.一种方法是将程序体包装在一个lambda
表单中,以便define
定义局部变量.但是,这也行不通:在一个lambda
表单中,所有定义都必须出现在body的开头(对于Scheme程序的顶层不是这样),并且在lambda
表单库中,绑定可以被词法覆盖,顶级绑定无法实现.
由于Scheme是Turing-complete,我当然可以在正在运行的Scheme系统中模拟Scheme系统,但我想知道是否可以通过使用该eval
过程.我感兴趣的一个原因是eval
可能会优化(例如通过JIT编译器后端),因此使用此过程可能会提供接近本机的速度(与手动编写简单的解释器相比).
归档时间: |
|
查看次数: |
579 次 |
最近记录: |