如何在 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
标记。哇!
我正在阅读 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
标记。哇!