SICP 연습문제 2.50 친절한 풀이
문제
페인터를 수평으로 뒤집어 변환하는 flip-horiz 프로시저를 정의하라. 페인터를 시계 반대 방향으로 180도, 270도 돌리는 프로시저도 정의해 보라.
문제로 부터 얻은 것
페인터 데이터를 추상화한 방식이 얼마나 효율적으로 다른 프로시저들을 만들 수 있는 지를 확인할 수 있었습니다.
페인터를 감싼 틀을 비튼다는 방식은 수많은 변형을 쉽게 가능하게 해주었습니다.
데이터를 잘 추상화하면 이렇게 좋다는 것을 보고 갑니다.
문제풀이
책의 설명을 잘 이해했다면 transform-painter의 사용은 그렇게 어렵지 않을 것 같습니다. 이 프로시저도 그전의 프로시저와 마찬가지로 기본으로 내장된 프로시저이니 따로 구현할 필요 없습니다.
#lang sicp |
결국 어떤 페이터의 틀을 조작하는 것은 그 틀의 origin의 좌표와 x축 좌표의 끝, y축 좌표의 끝를 조작하는 것입니다. 그림틀을 원하는 형태로 바꿨을 때 이 세 좌표가 새로운 그림틀의 어느 위치에 있는 지를 알면 쉽게 변형을 할 수 있습니다.
a. flip-horiz
(define (flip-horiz painter) |
b. rotate180
(define (rotate180 painter) |
c. rotate270
(define (rotate270 painter) |
읽어주셔서 감사합니다.