;; Macro definitions used for SAM behaviour definition ;; (module sam-macros (make-beh define-beh) (import scheme (chicken base) matchable) (define-syntax make-beh (syntax-rules (: => finally) ((make-beh : parent (self) (pat => body ...) ... (finally after ...)) (cons (lambda (self . message) (match message (pat body ...) ... (else 'pass)) after ...) parent)) ((make-beh (self) (pat => body ...) ... (finally after ...)) (make-beh : root-beh (self) (pat => body ...) ... (finally after ...))) ((make-beh : parent (self) (pat => body ...) ...) (make-beh : parent (self) (pat => body ...) ... (finally))) ((make-beh (self) (pat => body ...) ...) (make-beh : root-beh (self) (pat => body ...) ... (finally))))) (define-syntax define-beh (syntax-rules () ((_ name rest ...) (define name (make-beh rest ...))))))