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

sys*_*ich 6 lisp scheme sicp racket

必须根据以下价值决定:

(测试0(p))

测试定义为:

(define (test x y)
  (if (= x 0)
      0
      y))
Run Code Online (Sandbox Code Playgroud)

和p定义为:

(define (p) (p))
Run Code Online (Sandbox Code Playgroud)

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

sep*_*p2k 13

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

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

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