首页 文章

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

提问于
浏览
6

必须根据以下 Value 决定:

(测试0(p))

测试定义为:

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

和p定义为:

(define (p) (p))

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

1 回答

  • 13

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

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

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

相关问题