memoized parameters: call by need
puzzle
- how will this procedure behave
(define (doubler x)(if (zero? x) (display ‘done) (begin (display (* 2 x)) (doubler x))))
- when applied like this?
not always what we want…
- consider absolute value procedure
(define (abs i) (if (< i 0) (- i) i))
- does (abs …) always evaluate to a non-negative number? no!
(define (down) (begin (set! x (- x 2)) x))
(define x 3)
(abs (down))
- so want to memoize the value of the argument