paint¶
#lang racket (require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1))) (define wave einstein) ; Make compatible with the text book (define wave2 (beside wave (flip-vert wave))) (define wave4 (below wave2 wave2)) (display "beside wave \n") (paint wave2) (display "\nbeside below wave \n") (paint wave4) ; Creating abstraction for `wave4` (define (flipped-pairs painter) (let ((painter2 (beside painter (flip-vert painter)))) (below painter2 painter2))) (define wave5 (flipped-pairs wave)) (display "\nflipped-pairs\n") (paint wave5) ; Right split procedure (define (right-split painter n) (if (= n 0) painter (let ((smaller (right-split painter (- n 1)))) (beside painter (below smaller smaller))))) (define rs4 (right-split wave 4)) (display "\nRight split 4\n") (paint rs4) ; Up split procedure (define (up-split painter n) (if (= n 0) painter (let ((smaller (up-split painter (- n 1)))) (below painter (beside smaller smaller))))) ; Defining `corner-split` procedure (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)))))) (define cs3 (corner-split wave 3)) (display "\nCorner split 3\n") (paint cs3) ; Define `square-limit` pattern (define (square-limit painter n) (let ((quarter (corner-split painter n))) (let ((half (beside (flip-horiz quarter) quarter))) (below (flip-vert half) half)))) (define sl3 (square-limit wave 3)) (display "\nSquare limit pattern 3\n") (paint sl3)