문제
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))
|
읽어주셔서 감사합니다.