+
+
+
+
+
+(define-macro (define-mob mob-head . body)
+ (let ((name (car mob-head)) (attr (cdr mob-head)))
+ `(define ,(string->symbol (string-concatenate (list "make-" (symbol->string name))))
+ (lambda-mob ,attr ,@body))))
+
+(define-macro (lambda-mob attr . body)
+ `(lambda ()
+ (let ,(cons '(mob-id (gensym)) attr)
+ (lambda* (#:optional (option #f))
+ (case option
+ ((get-mob-id)
+ mob-id)
+ (else
+ (catch #t
+ (lambda () ,@body)
+ (lambda (key . args) #f))))))))