racket/collects/syntax/scribblings/parse/define.scrbl
2011-08-09 12:29:28 -06:00

40 lines
857 B
Racket

#lang scribble/doc
@(require scribble/manual
scribble/struct
scribble/decode
scribble/eval
"parse-common.rkt"
(for-label syntax/parse/define))
@title{Defining Simple Macros}
@defmodule[syntax/parse/define]
@defform[(define-simple-macro (macro-id . pattern) pattern-directive ...
template)]{
Defines a macro named @racket[macro-id]; equivalent to the following:
@racketblock[
(define-syntax (macro-id stx)
(syntax-parse stx
[(macro-id . pattern) pattern-directive ... (syntax template)]))
]
@(the-eval '(require syntax/parse/define))
@myexamples[
(define-simple-macro (fn x:id rhs:expr) (lambda (x) rhs))
((fn x x) 17)
(fn 1 2)
(define-simple-macro (fn2 x y rhs)
#:declare x id
#:declare y id
#:declare rhs expr
(lambda (x y) rhs))
((fn2 a b (+ a b)) 3 4)
(fn2 a #:b 'c)
]
}