如何在 SICP 的求值器(第 4 章)中标记原始过程?

How is a primitive procedure tagged in SICP's evaluator (chapter 4)?

我正在阅读 SICP 的第 4 章。在eval程序中,有一个程序application。此过程检查表达式是否标记有符号 'primitive'procedure.

我可以看到添加符号'procedure的位置。 (这是在评估 lambda 表达式时。)。

我找不到添加标签 'primitive 的位置?显然,当我向评估者提供程序时,我提供的是 (+ 1 2) 而不是 ('primitive + 1 2)。我猜 'primitive 标签被添加到某处(如 'procedure),但我找不到位置。

看看 primitive-procedure-objects 过程,其中 'primitive 标记被添加到 primitive-procedures 列表的元素,其中包含解释器可用的原始操作。

依次在setup-environment内部调用primitive-procedure-objects,用于为解释器创建初始环境。

当计算表达式 (+ 1 2) 时,计算器简单地在 eval 的案例分析中一直向下,匹配 application? 谓词,调用 apply 然后 (eval (operator exp) env) 在表达式的第一个元素上。反过来,这匹配案例分析中的 variable?,调用 lookup-variable-value,returns 一个过程,我们在 setup-environment 中用 'primitive 标记。哇!