灯下 登录
计算机科学 / SICP / 4.2.1 Normal Order and Applicative Order

Exercise 4.25 · 习题

Exercise 4.25: Suppose that (in ordinary
applicative-order Scheme) we define unless as shown above and then
define factorial in terms of unless as

(define (factorial n)
(unless (= n 1)
(* n (factorial (- n 1)))
1))

What happens if we attempt to evaluate (factorial 5)? Will our

definitions work in a normal-order language?

练习 4.25:假设(在普通的应用序 Scheme 中)我们按上文定义了 unless,然后用 unless 来定义阶乘:

(define (factorial n)
(unless (= n 1)
(* n (factorial (- n 1)))
1))

如果我们尝试对 (factorial 5) 求值,会发生什么?这些定义在正则序语言中能正常工作吗?

Racket #lang sicp
(define (factorial n)
 (unless (= n 1)
 (* n (factorial (- n 1)))
 1))