Nuparu00

turtle

Dec 6th, 2021
673
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;;Lecture 10
  2.  
  3. ;;3
  4. (defun print-fact (x)
  5.     (terpri)
  6.   (princ "print-fact applied at ")
  7.   (princ x)
  8.   (let ((prev (if (= x 0) 1 (* x (print-fact (- x 1))))))
  9.     (terpri)
  10.     (princ "print-fact returns ")
  11.     (princ prev)
  12.     ))
  13.  
  14. ;;4
  15. (defun prints-fact (x)
  16.   (labels ((fact (x depth)              
  17.              (terpri)
  18.              (indent depth)
  19.              (princ "prints-fact applied at ")
  20.              (princ x)
  21.              (let ((prev (if (= x 0)
  22.                              1
  23.                            (* x (fact (- x 1) (1+ depth))))))
  24.                (terpri)
  25.                (indent depth)
  26.                (princ "prints-fact returns ")
  27.                (princ prev))
  28.              )
  29.            (indent (x)
  30.              (if (<= x 0)
  31.                  0
  32.                (progn (princ " ") (indent (- x 1))))
  33.              ))
  34.     (fact x 0)
  35.     ))
  36.  
  37. ;;5
  38.  
  39. (defun tri-fract (length)
  40.   (labels ((step (length) (progn
  41.                             (ngon length 4)
  42.                             (turtle:move (/ length 2))
  43.                             (turtle:turn pi/4)
  44.                             (if (> length 1) (step (sqrt (* 2 (expt (/ length 2) 2)))) 0)
  45.                             )))
  46.     (step length)))
  47.  
  48.  
  49. (defun ngon (length n)
  50.   (labels ((draw (prev) (progn
  51.                           (turtle:draw length)
  52.                           (turtle:turn (* (/ 360 n) (/ pi 180)))
  53.                           (if (< prev (- n 1)) (draw (1+ prev)) 0)
  54.                           )))
  55.     (draw 0)
  56.     ))
  57.    
  58.  
  59. (defun clear () (turtle:clear))
  60.  
  61.  
  62.  
  63. (defun sqr-fract (length)
  64.     (labels ((step (length) (progn
  65.                             (ngon length 4)
  66.                             (turtle:move (* length 0.1))
  67.                             (turtle:turn (/ pi 32))
  68.                             (if (> length 1) (step (* length 0.88)) 0)
  69.                             )))
  70.     (step length)))
  71.  
  72.  
  73. (defun leaf (length)
  74.   (if (> length 1) (progn
  75.                      (turtle:draw length)
  76.                      (turtle:excursion
  77.                        (turtle:turn (/ pi 6))
  78.                        (leaf (* length 0.4))
  79.                        )
  80.                      (turtle:excursion
  81.                        (turtle:turn (* -1 (/ pi 6)))
  82.                        (leaf (* length 0.4))
  83.                        )
  84.                      (turtle:turn (/ pi 24))
  85.                      (leaf (* length 0.7))
  86.                      0
  87.                      )          
  88.     0
  89.     ))
  90.  
  91. ;;6
  92. (defun draw-bt (tree length)
  93.   (if (not (null tree)) (progn
  94.                           (if (not (null (cdr tree))) (turtle:excursion (turtle:turn (/ pi 3)) (turtle:draw length) (turtle:turn (* -1 (/ pi 3))) (draw-bt (cadr tree) (/ length 2))))
  95.                           (if (not (null (cddr tree))) (turtle:excursion (turtle:turn (* -1 (/ pi 3))) (turtle:draw length) (turtle:turn (/ pi 3)) (draw-bt (caddr tree) (/ length 2))))
  96.                           0)
  97.     0))
RAW Paste Data