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