;;; Scheme Recursive Art Contest Entry ;;; ;;; Please do not include your name or personal info in this file. ;;; ;;; Title: The fib-meister ;;; ;;; Description: ;;; Fibonacci helped ;;; Not really sure how he did ;;; But it looks pretty neat ;;; (define (list-size n) (if (= n 0) nil (cons 0 (list-size (- n 1))) ) ) ;;; helps define position (define (list-Change lst n) (cond ((null? lst) nil) ((= n 0) (cons (+ 1 (car lst)) (cdr lst))) (else (cons (car lst) (list-Change (cdr lst) (- n 1)))) ) ) ;;; Used for determining posiition of list for fib seq (define (list-pos n) (cond ((= n 0) 1) ((= n 1) 2) ((= n 2) 3) ((= n 3) 4) ((= n 5) 5) ((= n 8) 6) ((= n 13) 7) ((= n 21) 8) ((= n 34) 9) ((= n 55) 10) ((= n 89) 11) ((= n 144) 12) ((= n 233) 13) ((= n 377) 14) ) ) ;;; List adding mechanic (define (adder lst1 lst2) (cond ((null? lst1) nil) (else (cons (+ (car lst1) (car lst2)) (adder (cdr lst1) (cdr lst2)))) ) ) ;; get elemet (define (get-item lst n) (cond ((= n 0) (car lst)) ((null? lst) nil) (else (get-item (cdr lst) (- n 1))) ) ) ;; main event (define (fib lst n start1 start2) (define p (get-item lst (list-pos (car lst)))) (goto start1 start2) (cond ((= n 1) (define x (list-Change lst (- 1 n))) (define y (list-change x 2)) (define p (get-item y 2)) y ) ((= n 0) (define x (list-Change lst (- 1 n))) x ) (else (define x (adder (fib lst (- n 1) start1 start2) (fib lst (- n 2) start1 start2) )) (define y (list-change x (list-pos (car x)))) (define p (get-item y (list-pos (car y)))) (forward (* 20 (car y))) (left p) y ) ) ) (define (cross-out start end) (cond ((> start end) (penup) nil) (else (penup) (goto start -400) (pendown) (goto (* -1 start) 400) (cross-out (+ start 10) end) ) ) ) (define (wierdforward start1 start end) (cond ((> start1 end) (penup) nil) (else (penup) (goto 0 start) (pendown) (goto end 0) (wierdforward start1 (+ start 5) (- end 5)) ) ) ) (define (wierdbackward start1 start end) (cond ((< start1 start) (penup) nil) (else (penup) (goto 0 start) (pendown) (goto end 0) (wierdbackward start1 (+ start 5) (+ end 5)) ) ) ) (define (draw) (penup) (bgcolor (rgb 0 0 0)) (speed 0) (goto 0 0) (pendown) (color (rgb 1 1 1)) (define lst (list-size 16)) (wierdforward 0 0 500) (wierdforward -500 -500 0) (wierdbackward 0 -500 0) (wierdbackward 500 0 -500) (penup) (goto 250 250) (pendown) (color (rgb 1 0 1)) (fib lst 13 250 250) (goto 250 250) (penup) (goto -250 -250) (pendown) (fib lst 13 -250 -250) (goto -250 -250) (penup) ;(color (rgb 0 0 0)) ;(cross-out -500 500) (goto 1000 1000) (exitonclick) ) ; Please leave this last line alone. You may add additional procedures above ; this line. (draw)