]> git.jsancho.org Git - gacela.git/commitdiff
(no commit message)
authorjsancho <devnull@localhost>
Fri, 3 Jun 2011 00:08:09 +0000 (00:08 +0000)
committerjsancho <devnull@localhost>
Fri, 3 Jun 2011 00:08:09 +0000 (00:08 +0000)
src/gacela_mobs.scm

index c442bf5f5624ca44232ffe7d378610a9349b3eeb..12a0ef1d8aa90163e40a2469adfda912ac2b4184 100755 (executable)
 ;;; Actions for mobs
 
 (define-macro (define-action action-def . code)
-  `(define (,name mob-attr)
-     ,@code))
-
-(define-macro (define-action2 name attr . code)
-  `(define (,name mob-attr)
-     (let ,attr
-       ,@code
-       ,(cons 'begin (map #'attribute-save (reverse attr)))
-       mob-attr)))
-
+  (let ((name (car action-def)) (attr (cdr action-def)))
+    `(define (,name mob-attr)
+       (let ,(map attribute-definition attr)
+        ,@code
+        ,(cons 'list (map attribute-result attr))))))
+
+(define (attribute-definition attribute)
+  (let ((name (if (list? attribute) (car attribute) attribute))
+       (value (if (list? attribute) (cadr attribute) #f)))
+    `(,name (let ((v (assoc-ref mob-attr ',name))) (if v (cdr v) ,value)))))
+
+(define (attribute-result attribute)
+  (let ((name (if (list? attribute) (car attribute) attribute)))
+    `(list ',name ,name)))
 
 
 ;;; Mob Factory