SICP 연습문제 2.44 친절한 풀이

문제

corner-split 프로시저에서 쓰는 up-split 프로시저를 정의하라. 이 프로시저는 right-split과 비슷하지만, below와 beside가 하던 일을 서로 뒤바꾼다는 게 다르다.

문제로 부터 얻은 것

그림 프로시저를 사용해서 데이터를 표현하는 방법을 배웠습니다.

문제풀이

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

#lang sicp

(#%require sicp-pict)



되도는 프로시저를 만드는 것은 지금까지 수도없이 해왔던 일이므로 설명은 생략하겠습니다.

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


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

(define (corner-split painter n)
(if (= n 0)
painter
(let ((up (up-split painter (- n 1)))
(right (right-split painter (- n 1))))
(let ((top-left (beside up up))
(bottom-right (below right right))
(corner (corner-split painter (- n 1))))
(beside (below painter top-left)
(below bottom-right corner))))))



사용할 수 있는 그림중에는 einstein이 가장 좋아서 einstein으로 테스트해보겠습니다.

(paint (corner-split einstein 10))

painter가 잘 실행되는 모습




읽어주셔서 감사합니다.