(index ("define-syntax" 0) ("er-macro-transformer" 1666) ("ir-macro-transformer" 2075) ("strip-syntax" 2486))
(def (sig (syntax "(define-syntax IDENTIFIER TRANSFORMER)" (id define-syntax))) (p "Defines a macro named " (tt "IDENTIFIER") " that will transform an expression with " (tt "IDENTIFIER") " in operator position according to " (tt "TRANSFORMER") ". The transformer expression must be the result of a call to " (tt "er-macro-transformer") " or " (tt "ir-macro-transformer") ", or it must be a " (tt "syntax-rules") " form. If " (tt "syntax-rules") " is used, the usual R5RS semantics apply. If " (tt "TRANSFORMER") " is a transformer, then its transformer procedure will be called on expansion with the complete s-expression of the macro invocation, a rename procedure that hygienically renames identifiers and a comparison procedure that compares (possibly renamed) identifiers (see the section \"Explicit renaming macros\" below for a detailed explanation on non-R5RS macros).") (p (tt "define-syntax") " may be used to define local macros that are visible throughout the rest of the body in which the definition occurred, i.e.") (pre " (let ()\n   ...\n   (define-syntax foo ...)\n   (define-syntax bar ...)\n   ...)") (p "is expanded into") (pre " (let ()\n   ...\n   (letrec-syntax ((foo ...) (bar ...))\n     ...) )") (p (tt "syntax-rules") " supports " (link "http://srfi.schemers.org/srfi-46/" "SRFI-46") " in allowing the ellipsis identifier to be user-defined by passing it as the first argument to the " (tt "syntax-rules") " form. Also, \"tail\" patterns of the form") (pre " (syntax-rules ()\n   ((_ (a b ... c) \n     ...") (p "are supported.") (p "The effect of destructively modifying the s-expression passed to a transformer procedure is undefined."))
(def (sig (procedure "(er-macro-transformer PROCEDURE)" (id er-macro-transformer))) (p "Returns an explicit-renaming transformer object wrapping the syntax-transformer procedure " (tt "PROCEDURE") ". The procedure will be called with the form to be expanded and rename and compare procedures and perform explicit renaming to maintain hygiene. See below for more information about explicit renaming macros."))
(def (sig (procedure "(ir-macro-transformer PROCEDURE)" (id ir-macro-transformer))) (p "Returns a implicit-renaming transformer object wrapping the syntax-transformer procedure " (tt "PROCEDURE") ". The procedure will be called with the form to be expanded and an inject and compare procedure and perform implicit renaming to maintain hygiene.  See below for more information about implicit renaming macros."))
(def (sig (procedure "(strip-syntax EXPRESSION)" (id strip-syntax))) (p "Strips all syntactical information from " (tt "EXPRESSION") ", returning a new expression where symbols have all context-information removed."))
