SICP 연습문제 1.43 친절한 풀이

문제

f가 수를 계산하는 함수고 n이 0보다 큰 정수일 때, n번 f하는 함수는 x를 받아 f(f(f(x)))f(f(⋯ f(x) ⋯))하는 함수다. 이를테면 f가 xx+1x\mapsto x+1일 때, n번 f한 함수는 xx+nx\mapsto x+n이다. f가 제곱 함수면, n번 f한 함수는 인자의 2n2^n값을 구한다. f 프로시저와 0보다 큰 정수 n을 인자로 받아 f를 n번 하는 함수를 내놓는 프로시저를 짜라. 이 프로시저를 쓰는 방법은 다음과 같다.

((repeated square 2) 5)
>>625

문제로 부터 얻은 것

새로 배운 합성함수 프로시저에 기존에 연습했던 되도는 프로시저를 적용하는 문제였습니다.

문제풀이

이전 문제들에서 많은 되도는 프로시저를 만들어 봤기 때문에 어렵지 않게 문제를 풀 수 있었습니다.

(define (compose f g)
(lambda (x) (f (g x))))

(define (repeated f n)
(if (= n 1)
f
(compose f (repeated f (- n 1)))))

예시 코드가 잘 작동하는 모습

읽어주셔서 감사합니다.