diff options
author | Bruno Cichon <ebrasca.ebrasca@openmailbox.org> | 2017-02-24 01:52:56 +0100 |
---|---|---|
committer | Bruno Cichon <ebrasca.ebrasca@openmailbox.org> | 2017-02-24 01:52:56 +0100 |
commit | 8fd25145566cf4f1f6df21ce960f87342a3f037a (patch) | |
tree | 4ccb06f36fbe455562639a29590e698716a2cbfa | |
parent | b94d84cf431e3ca480d01ff277bf40463da09224 (diff) |
Fix rules. Add conditions in rules.
-rw-r--r-- | examples/l-system-example.lisp | 16 | ||||
-rw-r--r-- | src/l-system.lisp | 26 |
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))) |