Define some primitives:
(define (square x) (* x x)) (define (compose f g) (lambda (x) (f (g x))))
Define the procedure:
(define (repeat f n)
(lambda (x)
(if (< n 1) x
((compose f (repeat f (- n 1)))x))))
Test with:
((repeat square 2) 5)
Output:
625
Another solution using the linear iterative way.
(define (repeat f n )
(define (iter n result)
(cond ((= n 1) result)
(else (iter (- n 1) (compose f result)))))
(iter n f))
<< Previous exercise (1.42) | Next exercise (1.44) >>