summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Cichon <ebrasca.ebrasca@openmailbox.org>2017-02-24 01:52:56 +0100
committerBruno Cichon <ebrasca.ebrasca@openmailbox.org>2017-02-24 01:52:56 +0100
commit8fd25145566cf4f1f6df21ce960f87342a3f037a (patch)
tree4ccb06f36fbe455562639a29590e698716a2cbfa
parentb94d84cf431e3ca480d01ff277bf40463da09224 (diff)
Fix rules. Add conditions in rules.
-rw-r--r--examples/l-system-example.lisp16
-rw-r--r--src/l-system.lisp26
2 files changed, 13 insertions, 29 deletions
diff --git a/examples/l-system-example.lisp b/examples/l-system-example.lisp
index 37d5cc3..deac189 100644
--- a/examples/l-system-example.lisp
+++ b/examples/l-system-example.lisp
@@ -3,26 +3,28 @@
;;Lindenmayer's original L-system
;;Example 1: Algae
(-> a ()
- (a) (b))
+ '((a) (b)))
(-> b ()
- (a))
+ '((a)))
(l-system #'parametric-grammar '((a)) 3)
;;;Parametric grammars
(-> f ()
- (f 1)
- (j 1)
- (f 1))
+ '((f 1)
+ (j 1)
+ (f 1)))
(-> j (x)
- (j (* 3 x)))
+ (if (oddp x)
+ `((j ,(1+ (* 3 x))))
+ `((j ,(/ x 2)))))
(l-system #'parametric-grammar '((f 1.0)) 3)
;;;Context sensitive grammars
(-> (f j f) (x)
- (j (* 2 x)))
+ `((j ,(* 2 x))))
(l-system #'context-sensitive-grammar '((f 1.0)) 3)
diff --git a/src/l-system.lisp b/src/l-system.lisp
index 1ea07fe..2f39259 100644
--- a/src/l-system.lisp
+++ b/src/l-system.lisp
@@ -36,27 +36,9 @@ It can expand to parametric grammar or to context sensitive grammar."
(list `(,symbol1 ,@parameters1))))
(setf symbol0 (first (first elt)))))
-(defmacro setf-l-system-rule (symbol lambda)
- "Set rules to grammar."
- `(setf (gethash ,symbol *l-system-clauses*)
- ,lambda))
-
-(defun make-l-system-expr (item)
- "(Symbol . paremetes)"
- `(list ',(first item) ,@(rest item)))
-
-(defun make-l-system-list (rest)
- "Make rule conversion part."
- (iter (for item in rest)
- (collecting (make-l-system-expr item))))
-
-(defmacro make-l-system-rule (vars &body body)
- "Define rule for grammar."
- `#'(lambda ,(append vars '(&rest rest))
- (declare (ignorable rest))
- (list ,@(make-l-system-list body))))
-
(defmacro -> (symbol vars &body body)
"Define and set rules to grammar."
- `(setf-l-system-rule ',symbol
- (make-l-system-rule ,vars ,@body)))
+ `(setf (gethash ',symbol *l-system-clauses*)
+ #'(lambda ,(append vars '(&rest rest))
+ (declare (ignorable rest))
+ ,@body)))