From: jsancho Date: Sun, 26 Jun 2011 08:01:39 +0000 (+0000) Subject: (no commit message) X-Git-Url: https://git.jsancho.org/?a=commitdiff_plain;h=d2cbfa2d53c011c7c1939e14201fb41a322a9031;p=gacela.git --- diff --git a/src/gacela_mobs.scm b/src/gacela_mobs.scm index 51ce549..927d8b1 100755 --- a/src/gacela_mobs.scm +++ b/src/gacela_mobs.scm @@ -62,33 +62,23 @@ (define (attr-def attr) (let ((name (car attr)) (value (cadr attr))) - `(,name (get-attr attributes ',name ,value)))) - -;; (defmacro make-behaviour (name attr &rest code) -;; `(defun ,(get-behaviour-fun-name name) (object-attr) -;; (let ,(mapcar #'attribute-definition attr) -;; ,@code -;; ,(cons 'progn (mapcar #'attribute-save (reverse attr))) -;; object-attr))) - -;; (defun get-behaviour-fun-name (name) -;; (intern (concatenate 'string "BEHAVIOUR-" (string-upcase (string name))) 'gacela)) - -;; (defun attribute-name (attribute) -;; (intern (string attribute) 'keyword)) - -;; (define (attribute-definition attribute) -;; (let* ((name (cond ((list? attribute) (car attribute)) -;; (else attribute))) -;; (pname (attribute-name name)) -;; (value (cond ((listp attribute) (cadr attribute))))) -;; `(,name (getf object-attr ,pname ,value)))) - -;; (defun attribute-save (attribute) -;; (let* ((name (cond ((listp attribute) (car attribute)) -;; (t attribute))) -;; (pname (attribute-name name))) -;; `(setf (getf object-attr ,pname) ,name))) + `(,name (get-attr attributes ',name ',value)))) + +(define (attr-save attr) + (let ((name (car attr))) + `(assoc-set! attributes ',name (list ,name)))) + +(define-macro (define-action action-head . code) + (let ((name (car action-head)) (attr (cdr action-head))) + `(define ,name + (lambda-action ,attr ,@code)))) + +(define-macro (lambda-action attr . code) + `(lambda (attributes) + (let ,(map attr-def attr) + ,@code + ,(cons 'begin (map attr-save attr)) + attributes))) (define-macro (lambda-look . look) (define (process-look look)