必须根据以下值决定:
(测试0(p))
其中test定义为:
(define (test x y)
(if (= x 0)
0
y))
和p定义为:
(define (p) (p))
当我评估(test 0 (p))
时,解释器进入无限循环,表明它正在评估p
。这显示了 正常顺序评估 ,因为在替换参数之前会评估操作数。 SICP表示LISP使用应用订单评估。
答案 0 :(得分:13)
这显示正常顺序评估,因为在替换参数之前评估操作数
实际上你错了路。应用顺序是首先评估操作数的时间。正常顺序是将参数替换为未评估的表达式。
所以球拍使用了应用顺序,因为正如你所说的那样首先评估参数(除非你使用“Lazy Racket”,在这种情况下它使用call-by-need又称懒惰评估,这与正常顺序一样,除了评估每个参数最多一次)。