Hello guilers, I've taken the liberty of writing documentation for the syntax parameters that were added to master a short while back. Comments kindly requested. It is in org mode format, as I do not know texinfo at this moment, but I will look into that shortly. It is also missing an example, but I have to go and buy one last Christmas present, and will do it this evening :).
Eli, I'd especially appreciate it if you could clear up any misconceptions I may have, or may be unintentionally imparting on others. * Syntax Parameters Syntax parameters[fn:1] are a mechanism for rebinding a macro definition within the dynamic extent of a macro expansion. It provides a convenient solution to one of the most common types of unhygienic macro: those that introduce a special binding each time the macro is used. Examples include an 'if' form that binds the result of the test to an 'it' binding, or class macros that introduce a special 'self' binding. With syntax parameters, instead of introducing the binding unhygienically each time, we instead create one binding for the keyword, which we can then adjust later when we want the keyword to have a different meaning. As no new bindings are introduced hygiene is preserved. This is similar to the dynamic binding mechanisms we have at run-time like parameters[fn:2] or fluids[fn:3]. ** define-syntax-parameter keyword transformer [syntax] Binds keyword to the value obtained by evaluating transformer as a syntax-parameter. The transformer provides the default expansion for the syntax parameter, and in the absence of syntax-parameterize, is functionally equivalent to define-syntax. ** syntax-parameterize ((keyword transformer) ...) exp ... [syntax] (note, each keyword must be bound to a syntax-parameter Adjusts each of the keywords to use the value obtained by evaluating their respective transformer, in the expansion of the exp forms. It differs from let-syntax, in that the binding is not shadowed, but adjusted, and so uses of the keyword in the expansion of exp forms use the new transformers. ** TODO example if it, loop escape?, class? * Footnotes [fn:1] Eli Barzilay, Ryan Culpepper and Matthew Flatt. Keeping it Clean with Syntax Parameters. In Proc. Workshop on Scheme and Functional Programming, October 2011. [fn:2] Marc Feeley. SRFI 39: Parameter objects, 2003. http://srfi.schemers.org/srfi-39/. [fn:3] https://www.gnu.org/software/guile/manual/guile.html#Fluids-and-Dynamic-States -- Ian Price "Programming is like pinball. The reward for doing it well is the opportunity to do it again" - from "The Wizardy Compiled"