gpt4 book ai didi

scheme - The Little Schemer 中原始函数的范围是否不正确?

转载 作者:行者123 更新时间:2023-12-01 13:28:49 24 4
gpt4 key购买 nike

考虑以下 s 表达式:

((lambda (car) (car (quote (a b c)))) cdr)

在我尝试过的大多数方案实现中,计算结果为 (b c)因为 cdr传递给 lambda,将其命名为 car ,优先于 car 的原始实现.

Little Schemer 提供了第 10 章中用 scheme 编写的方案的实现。该实现返回 a对于上面的表达,这对我来说似乎不正确。

很清楚为什么该实现会这样:原始函数的名称被视为 *const而不是 *identifier here .一个 *const不是数字或 bool 值的将呈现为 primitive这最终是 hardwiredactual primitives .

我相信正确的实现是不对原始名称进行特殊检测,而是在 value function 中创建一个初始表。它包含一个将原始名称映射到实际原始实现的条目。

我的问题是:这是 The Little Schemer 实现方案中的错误吗?这种行为是否在方案中得到了很好的说明,还是在 1974 年写这本书时没有很好地说明?

最佳答案

它是一个错误吗?

是否是错误的问题是确定解释器是否应该遵循 Scheme 范围规则。既然你提到了 1974 年,那是第一份 Scheme 报告发布的前一年,但是很多想法可能是当时写的,而后来成为 Scheme 的就是小型解释器,可能在研究生之间共享,有各种细微的差异.

小 Schemer 最初被称为 The little Lisper,后来在 Lisp 下工作,后来成为 Common Lisp。当重写它以遵循 Scheme 时,他们试图保留之前的大部分代码,因此解释器可能具有与 Scheme 不同的功能。

RNRS 计划报告的内容

如果解释器要符合方案报告,它必须允许绑定(bind)隐藏顶级绑定(bind)。这是 R5RS 报告中关于 Variables, syntactic keywords, and regions 的引述。

Every mention of an identifier refers to the binding of the identifier that established the innermost of the regions containing the use. If there is no binding of the identifier whose region contains the use, then the use refers to the binding for the variable in the top level environment



对于以后的报告,如 same section in R6RS顶层替换为“在封闭库或顶层程序的顶部定义或导入”。

关于scheme - The Little Schemer 中原始函数的范围是否不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47031344/

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