gpt4 book ai didi

reflection - R7RS Scheme的反射能力

转载 作者:行者123 更新时间:2023-12-03 09:46:25 24 4
gpt4 key购买 nike

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

1) scheme系统可以运行报告中5.1节描述的程序。

2) scheme 系统可以提供一个读取-求值-打印-循环,其中 Scheme 代码以交互方式解释。

我的问题是这两种运行 Scheme 代码的方式如何在 Scheme 系统中反射(reflect)出 R7RS 报告中包含的内容。

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

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

此外,由于其他原因,我不能使用交互环境来eval一个完整的 Scheme 程序:它通常不是空的,特别是它包含 (scheme base)< 的所有绑定(bind)

为了实现 1) 在一个正在运行的 Scheme 系统中,eval 库过程 environment 看起来很有前途,因为它允许预先导入库(这是运行程序的一部分)。但是,环境是不可变的,因此我无法在环境中评估 define。一种解决方法是将要运行的程序主体包装成 lambda 形式,以便 define 定义局部变量。然而,这也行不通:在 lambda 表单中,所有定义都必须出现在主体的开头(这对于 Scheme 程序的顶层是不正确的)和 lambda 表单库绑定(bind)可以词法覆盖,这是顶级绑定(bind)不可能的。

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

最佳答案

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

关于reflection - R7RS Scheme的反射能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20981637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com