;;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-(in-package :gacela)
-
;;; World of Mob
+
+;(in-package :gacela)
+
+(defmacro makemob (name variables &rest methods)
+ `(let ,variables
+ (defun ,name (&rest args &aux (option (car args)))
+ ,(mob-options methods))))
+
+(defun mob-options (methods)
+ (labels ((options (m &aux (option (car m)) (vars (cadr m)) (body (caddr m)))
+ (cond ((null m) nil)
+ (t (cons option (cons (lambda body (options (cdddr m))))))))
+ (cons 'case (cons 'option (options methods)))))
+
(defmacro defmob (name variables &key init logic render)
`(let ((make-name ',(intern (concatenate 'string "MAKE-" (string name)))))
(setf (symbol-function make-name)
(makemob ,variables :init ,init :logic ,logic :render ,render))
make-name))
-(defmacro makemob (variables &key init logic render)
- `(lambda
- ,(if (null variables) () (cons '&key variables))
- (mob-structure ,variables ,init ,logic ,render)))
+;(defmacro makemob (variables &key init logic render)
+; `(lambda
+; ,(if (null variables) () (cons '&key variables))
+; (mob-structure ,variables ,init ,logic ,render)))
(defmacro mob-structure (variables init logic render)
`(list