summaryrefslogtreecommitdiff
path: root/src/l-system.lisp
diff options
context:
space:
mode:
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))))