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又称懒惰评估,这类似于正常顺序,除了每个参数最多被评估一次).