必须根据以下 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使用申请订单评估 .
(test 0 (p))
p
这显示了正常顺序评估,因为在替换参数之前评估操作数
实际上你得到了错误的方法 . 应用顺序是首先评估操作数的时间 . 正常顺序是将参数替换为未评估的表达式 .
因此,球拍使用应用顺序,因为正如你所说的那样首先评估参数(除非你使用“Lazy Racket”,在这种情况下它使用call-by-need又称懒惰评估,这类似于正常顺序,除了每个参数最多被评估一次) .
1 回答
实际上你得到了错误的方法 . 应用顺序是首先评估操作数的时间 . 正常顺序是将参数替换为未评估的表达式 .
因此,球拍使用应用顺序,因为正如你所说的那样首先评估参数(除非你使用“Lazy Racket”,在这种情况下它使用call-by-need又称懒惰评估,这类似于正常顺序,除了每个参数最多被评估一次) .