考虑以下 s 表达式:
((lambda (car) (car (quote (a b c)))) cdr)
在我尝试过的大多数方案实现中,这计算为(b c)
因为cdr
被传递给 lambda,它命名它car
,优先于car
.
Little Schemer 提供了第 10 章中用 scheme 编写的 scheme 实现。该实现返回a
上述表达式,这对我来说似乎不正确。
很清楚为什么该实现会这样:原始函数的名称被视为*const
而不是*identifier
here。*const
不是数字或布尔值的A被渲染为基元,最终硬连线到实际的基元。
我相信正确的实现是不对原始名称进行特殊检测,而是在值函数中创建一个初始表,其中包含一个将原始名称映射到实际原始实现的条目。
我的问题是:这是 The Little Schemer 实施方案中的错误吗?这种行为是否在方案中得到了很好的说明,还是在 1974 年写这本书时没有很好地说明?