guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Syntax Parameters documentation for guile


From: Ian Price
Subject: Syntax Parameters documentation for guile
Date: Fri, 23 Dec 2011 15:46:19 +0000
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3 (gnu/linux)

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"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]