summaryrefslogtreecommitdiff
path: root/src/l-system.lisp
diff options
context:
space:
mode:
authorBruno Cichon <ebrasca.ebrasca@gmail.com>2015-08-28 21:45:00 +0200
committerBruno Cichon <ebrasca.ebrasca@gmail.com>2015-08-28 21:45:00 +0200
commit951c966fdc9913a9d08341a65fafe936a20cdf59 (patch)
tree52d2d14da688abb10643b16c1d3e41aa1b03e90b /src/l-system.lisp
parenta6b3d525ebafa6ce8e9e01fcce750d1185aa626f (diff)
Add turtle-system
Diffstat (limited to 'src/l-system.lisp')
-rw-r--r--src/l-system.lisp52
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))))