summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/l-system.lisp8
-rw-r--r--src/package.lisp1
2 files changed, 8 insertions, 1 deletions
diff --git a/src/l-system.lisp b/src/l-system.lisp
index 0fcf0ce..743e5ea 100644
--- a/src/l-system.lisp
+++ b/src/l-system.lisp
@@ -25,11 +25,17 @@
(iter (for clause in clauses)
(appending (let ((func (gethash (car clause) *l-system-clauses*)))
(if (functionp func)
- (let ((result (funcall func (rest clause))))
+ (let ((result (apply func
+ (rest clause))))
(when result
result))
(list clause))))))
+(defmacro deflsys (symbol vars &body body)
+ `(def-l-system-clause ',symbol
+ (lambda ,vars
+ ,@body)))
+
(defun def-l-system-clause (symbol lambda)
(setf (gethash symbol *l-system-clauses*)
lambda))
diff --git a/src/package.lisp b/src/package.lisp
index 3388533..346e8a2 100644
--- a/src/package.lisp
+++ b/src/package.lisp
@@ -6,6 +6,7 @@
#:l-system
#:map-l-system
#:def-l-system-clause
+ #:deflsys
#:turtle-system
#:list-of-vectors->list))