SICP 연습문제 2.45 친절한 풀이

문제

right-split과 up-split을 이보다 더 쓰임새가 넓은 split 연산의 인스턴스로 정의할 수 있다. 두 프로시저를 다음과 같이 정의할 수 있도록 split 프로시저를 자라.

(define right-split (split beside below))
(define up-split (split below beside))

문제로 부터 얻은 것

1장에서 주구장창 반복한 차수 높은 프로시저로 그림을 그려 보았습니다.

문제풀이

dr.racket에서 그림 언어를 사용하는 법에 설명된 방법으로 paint를 사용할 수 있습니다.

#lang sicp

(#%require sicp-pict)



기존의 right-split과 up-split을 이용하면 일반적인 프로시저 split을 쉽게 짤 수 있습니다. 또, 이번에는 프로시저 인자에 painter가 명시되어있지 않으므로 람다식으로 작성해야 합니다. n도 명시되어 있지 않으므로 임의로 10번 반복하도록 하겠습니다.

(define (up-split painter n)
(if (= n 0)
painter
(below painter
(beside (up-split painter (- n 1))
(up-split painter (- n 1))))))



(define (split proc1 proc2)
(define (split-iter painter n)
(if (= n 0)
painter
(proc1 painter
(proc2 (split-iter painter (- n 1))
(split-iter painter (- n 1))))))
(lambda (painter)
(split-iter painter 10)))



(define right-split (split beside below))
(define up-split (split below beside))


(paint (right-split einstein))
(paint (up-split einstein))



짜부된 아인슈타인이 반복하는 모습



읽어주셔서 감사합니다.