;; repeated (define (repeated n f) (lambda (x) (if (zero? n) x ((repeated (- n 1) f)(f x))))) ((repeated 3 (lambda (x) (* x 3))) 3) ; -> 81 ((repeated 3 (cut * <> 3)) 3) ; -> 81 (define (repeated n f) (lambda (x) (letrec ((rep (lambda (n acc) (if (zero? n) (acc x) (rep (- n 1) (lambda (y) (f (acc y)))))))) (rep n identity)))) ((repeated 5 (cut * <> 2)) 2) ; -> 64 (define (repeated n f) (lambda (x) (let loop ((n n) (acc identity)) (if (zero? n) (acc x) (loop (- n 1) (lambda (y) (f (acc y)))))))) ((repeated 5 (cut * <> 2)) 2) ; -> 64