DrRacket口译员是否使用基于SICP练习1.5的正常顺序评估?

时间:2010-12-12 15:35:00

标签: lisp scheme racket sicp

必须根据以下值决定:

  

(测试0(p))

其中test定义为:

(define (test x y)
  (if (= x 0)
      0
      y))

和p定义为:

(define (p) (p))

当我评估(test 0 (p))时,解释器进入无限循环,表明它正在评估p。这显示了 正常顺序评估 ,因为在替换参数之前会评估操作数。 SICP表示LISP使用应用订单评估。

1 个答案:

答案 0 :(得分:13)

  

这显示正常顺序评估,因为在替换参数之前评估操作数

实际上你错了路。应用顺序是首先评估操作数的时间。正常顺序是将参数替换为未评估的表达式。

所以球拍使用了应用顺序,因为正如你所说的那样首先评估参数(除非你使用“Lazy Racket”,在这种情况下它使用call-by-need又称懒惰评估,这与正常顺序一样,除了评估每个参数最多一次)。