(cond ((or (not (defined? 'canvas)) (not (image? canvas))) (define canvas (image.new 200 200)) (image.show canvas))) (define fractal-rectangle! (lambda (image color left top right bottom level) (cond ((= level 0) (envt.set-fgcolor! color) (image.select-rectangle! image selection.replace left top (- right left) (- bottom top)) (image.fill! image) (image.select-nothing! image) (envt.update-displays!)) (else (let* ((midcol1 (round (+ left (/ (- right left) 3)))) (midcol2 (round (- right (/ (- right left) 3)))) (midrow1 (round (+ top (/ (- bottom top) 3)))) (midrow2 (round (- bottom (/ (- bottom top) 3))))) ; First row of squares (fractal-rectangle! image color left top midcol1 midrow1 (- level 1)) (fractal-rectangle! image (rgb.complement color) midcol1 top midcol2 midrow1 (- level 1)) (fractal-rectangle! image color midcol2 top right midrow1 (- level 1)) ; Second row of squares (fractal-rectangle! image (rgb.complement color) left midrow1 midcol1 midrow2 (- level 1)) (fractal-rectangle! image color midcol1 midrow1 midcol2 midrow2 (- level 1)) (fractal-rectangle! image (rgb.complement color) midcol2 midrow1 right midrow2 (- level 1)) ; Third row of squares (fractal-rectangle! image color left midrow2 midcol1 bottom (- level 1)) (fractal-rectangle! image (rgb.complement color) midcol1 midrow2 midcol2 bottom (- level 1)) (fractal-rectangle! image color midcol2 midrow2 right bottom (- level 1)) )))))