【发布时间】:2019-12-19 01:16:24
【问题描述】:
我正在练习 SICP 的练习 1.34
练习 1.34。假设我们定义了过程
(define (f g)
(g 2))
那么我们有
(f square)
4
(f (lambda (z) (* z (+ z 1))))
6
如果我们(反常地)要求解释器评估组合(f f),会发生什么?解释。
参考解决方法:
第一步:
(f f)
第二步:
(f (lambda (g)
(g 2)))
第三步:
((lambda (g)
(g 2))
(lambda (g)
(g 2)))
第四步:
((lambda (g)
(g 2))
2)
第五步:
(2 2)
前3个步骤我明白了,至于第4步,第二个f怎么会被评估为2?
其他解决方案
结果报错:使用(f f)中的替换规则
g = f : (g 2) -> (f 2)
再次使用(f 2)中的替换规则
g = 2 : (f 2)-> (2 2) -> error.
来自 DrRacket 的实际错误是:
困惑依然存在,我的思绪缓慢地跳到“被评估为 2”。
【问题讨论】: