diff options
author | Bruno Cichon <ebrasca.ebrasca@gmail.com> | 2015-08-28 21:45:00 +0200 |
---|---|---|
committer | Bruno Cichon <ebrasca.ebrasca@gmail.com> | 2015-08-28 21:45:00 +0200 |
commit | 951c966fdc9913a9d08341a65fafe936a20cdf59 (patch) | |
tree | 52d2d14da688abb10643b16c1d3e41aa1b03e90b /src/l-system.lisp | |
parent | a6b3d525ebafa6ce8e9e01fcce750d1185aa626f (diff) |
Add turtle-system
Diffstat (limited to 'src/l-system.lisp')
-rw-r--r-- | src/l-system.lisp | 52 |
1 files changed, 7 insertions, 45 deletions
diff --git a/src/l-system.lisp b/src/l-system.lisp index d57c419..c5255a5 100644 --- a/src/l-system.lisp +++ b/src/l-system.lisp @@ -28,48 +28,10 @@ (defmacro l-system (&rest rules) (generate-l-system rules)) -(defun iter-l-system (fn seed n) - (iter (repeat n) - (with item = seed) - (setf item - (iterconcat fn - item)) - (finally (return item)))) - -(defun eval-l-system (fn list) - (iter (with seed = '(0 0 0)) - (for item in list) - (appending (setf seed - (mapcar #'+ - seed - (car (funcall fn item))))))) - -#| -(iterconcat (l-system (a a i a d a) - (b b d b i b) - (i i b i a i) - (d d a d b d)) - '(d)) ;; --> (D A D B D) - -(iter-l-system (l-system (a a i a d a) - (b b d b i b) - (i i b i a i) - (d d a d b d)) - '(d) - 3) -;; --> (D A D B D A I A D A D A D B D B D B I B D A D B D A I A D A I B I A I A I A D - A D A D B D A I A D A D A D B D A I A D A D A D B D B D B I B D A D B D B D B - I B D A D B D B D B I B I B I A I B D B I B D A D B D A I A D A D A D B D B D - B I B D A D B D) - -(eval-l-system (l-system (a (0.0 1.0 0.0)) - (b (0.0 -1.0 0.0)) - (i (-1.0 0.0 0.0)) - (d (1.0 0.0 0.0))) - (iter-l-system (l-system (a a i a d a) - (b b d b i b) - (i i b i a i) - (d d a d b d)) - '(d) - 3)) -|# +(defun iter-l-system (rules axiom depth) + (iter (repeat depth) + (with result = axiom) + (setf result + (iterconcat rules + result)) + (finally (return result)))) |