(require (lib "turtles.ss" "graphics"))

(define step 10)

(define (dragon-list n)
  (define (next n)
    (define (invert l)
      (cond
        ((null? l) '())
        ((eq? (car l) 'r) (cons 'l (invert (cdr l))))
        ((eq? (car l) 'l) (cons 'r (invert (cdr l))))))
    (append n (list 'r) (reverse (invert n))))
  (cond
    ((= n 0) '(r))
    ((> n 0) (next (dragon-list (- n 1))))))

(define (draw-dragon l)
  (turtles 't)
  (tprompt
   (cond
     [(null? l) "Finished"]
     [
      (cond
        [(eq? (car l) 'l) (draw step) (turn 90)]
        [(eq? (car l) 'r) (draw step) (turn -90)])
      (draw-dragon (cdr l))])))

(define (dragon n) (draw-dragon (dragon-list n)))
