1(library (nmosh util define-macro) 2 (export define-macro) 3 (import (rnrs) 4 (for (nmosh util multy-invoke) expand) 5 (for (nmosh util lisp-transformer) expand)) 6 7(define-syntax define-macro 8 (syntax-rules () 9 ((_ (name . (a . b)) body ...) 10 (define-syntax name 11 (lisp-transformer 12 (lambda (input) 13 (let ((exp (cdr input))) 14 (multy-invoke exp (a . b) body ...)))))) 15 16 ((_ (name) body ...) 17 (define-syntax name 18 (lisp-transformer 19 (lambda (x) 20 body ...)))) 21 22 ((_ (name . x) body ...) 23 (define-syntax name 24 (lisp-transformer 25 (lambda (input) 26 (let ((x (cdr input))) 27 body ...))))))) 28 29 30) 31