paint-higher-order¶
#lang racket (require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1))) (define wave einstein) ; Make compatible with the text book ; Square of four higher order procedure (define (square-of-four tl tr bl br) (lambda (painter) (let ((top (beside (tl painter) (tr painter))) (bottom (beside (bl painter) (br painter)))) (below bottom top)))) ; Flipped pair in terms of `square-of-four` (define (flipped-pairs painter) (let ((combine4 (square-of-four identity flip-vert identity flip-vert))) (combine4 painter))) (define f1 (flipped-pairs wave)) (display "Flipped pair\n") (paint f1) ; Square limit in terms of `square-of-four` (define (square-limit painter n) (let ((combine4 (square-of-four flip-horiz identity rotate180 flip-vert))) (combine4 (corner-split painter n)))) (define (up-split painter n) (if (= n 0) painter (let ((smaller (up-split painter (- n 1)))) (below painter (beside smaller smaller))))) (define (right-split painter n) (if (= n 0) painter (let ((smaller (right-split painter (- n 1)))) (beside painter (below smaller smaller))))) (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 sl1 (square-limit wave 3)) (display "\nSquare limit 3\n") (paint sl1)