(define koch (let ((s (/ (sqrt 3) 2 3))) (lambda (res depth) (letrec ((iter (lambda (x1 y1 x2 y2 d) (if (zero? d) (draw-line x2 y2) (let* ((dx (- x2 x1)) (dy (- y2 y1)) (thx (+ x1 (/ dx 3))) (thy (+ y1 (/ dy 3))) (thx2 (+ x1 (* 2 (/ dx 3)))) (thy2 (+ y1 (* 2 (/ dy 3)))) (mx (/ (+ x1 x2) 2)) (my (/ (+ y1 y2) 2)) (midx (+ mx (* (- dy) s))) (midy (+ my (* dx s)))) (iter x1 y1 thx thy (- d 1)) (iter thx thy midx midy (- d 1)) (iter midx midy thx2 thy2 (- d 1)) (iter thx2 thy2 x2 y2 (- d 1))))))) (draw-move 0 0) (draw-color 0 255 0) (iter 0 0 res 0 depth))))) (koch 200 4)