我正在读SICP的第四章。在 eval 程序,有一个程序 application 是的。此过程检查表达式是否用符号标记 'primitive 或 'procedure 是的。
eval
application
'primitive
'procedure
我能看到符号在哪里 '程序 已添加。(当计算lambda表达式时)。
'程序
我找不到标签在哪里 '原始 是否已添加?显然,当我向评估者提供一个程序时 (+ 1 2) 而不是 ('primitive + 1 2) 是的。我猜 '原始 标签被添加到某个地方(比如 '程序 ),但我找不到地方。
'原始
(+ 1 2)
('primitive + 1 2)
看看 primitive-procedure-objects 程序,这就是 'primitive 标记被添加到 primitive-procedures 列表,其中包含可供解释器使用的基本操作。
primitive-procedure-objects
primitive-procedures
反过来, 基本过程对象 是在里面叫的 setup-environment ,用于为解释器创建初始环境。
基本过程对象
setup-environment
当计算表达式时,例如 (+ 1 2) ,在案例分析中,评估者只需一路向下 eval ,匹配 application? 谓词,它调用 apply 然后 (eval (operator exp) env) 在表达式的第一个元素上。反过来,这个匹配 variable? 在案例分析中, lookup-variable-value ,它返回一个过程,我们用 '原始 在里面 安装环境 是的。呼!
application?
apply
(eval (operator exp) env)
variable?
lookup-variable-value
安装环境