summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Cichon <ebrasca.ebrasca@gmail.com>2015-08-18 02:59:08 +0200
committerBruno Cichon <ebrasca.ebrasca@gmail.com>2015-08-18 02:59:08 +0200
commita6b3d525ebafa6ce8e9e01fcce750d1185aa626f (patch)
treea8953ca66bb1096592cd75b728ad7654577181ce
parent21e26667a6102ac521aee999be494f154e36b6a8 (diff)
Add evaluation to l-system
-rw-r--r--src/l-system.lisp19
-rw-r--r--src/package.lisp4
2 files changed, 22 insertions, 1 deletions
diff --git a/src/l-system.lisp b/src/l-system.lisp
index 5ea3801..d57c419 100644
--- a/src/l-system.lisp
+++ b/src/l-system.lisp
@@ -36,6 +36,14 @@
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)
@@ -53,4 +61,15 @@
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))
|#
diff --git a/src/package.lisp b/src/package.lisp
index db6f96e..be69e5f 100644
--- a/src/package.lisp
+++ b/src/package.lisp
@@ -3,5 +3,7 @@
(defpackage #:l-system
(:use #:cl #:iter)
(:export #:l-system
- #:turtle))
+ #:turtle
+ #:iter-l-system
+ #:eval-l-system))