Practice 4.25
(define (unless condition usual-value exceptional-value)
(if condition
exceptional-value
usual-value))
(define (factorial n)
(unless (= n 1)
(* n (factorial (- n 1)))
1))
(factorial 5)
这样的写法,在应用序的scheme里面,不会得到结果。 因为在unless调用之前,会先求出它的三个参数condition,exceptional-value,usual-value (factorial 5)调用时,condition和usual-value分别为false和1,exceptional-value求值过程中 会继续在调用unless之前求它的参数,当n等于1的时候,第二个参数会继续求值(* 1 (factorial 0)), 然后n等于0, -1, -2 …一直无限求值下去,得不到结果。 而在正则序的情况下,调用unless的时候,如果condition是true的情况,exceptional-value就没有必要 再求值了,所以(factorial 1)会直接返回1,可以得到正确的结果。