This site is a static rendering of the Trac instance that was used by R7RS-WG1 for its work on R7RS-small (PDF), which was ratified in 2013. For more information, see Home. For a version of this page that may be more recent, see MinimalSyntaxCaseCowan in WG2's repo for R7RS-large.


2012-06-09 04:05:36

From Eli Barzilay's posting, lightly edited for continuity:

The "minimal API" of a syntax-case system is made of syntax-case, syntax, syntax->datum, and datum->syntax.

With syntax-case it is extremely straightforward to create something like syntax-e if it's not built in -- and syntax-case itself is then no longer necessary; syntax->datum can be done in exactly the same way (applied recursively), so it's just a convenience. This leaves you with two things: syntax as a core lexical-scope-preserving quotation notation, and datum->syntax as a way to construct new identifiers unhygienically. Datum->syntax is therefore the only real "complex API" here, and it's complexity is (very unsurprisingly) very similar to explicit renaming or syntactic closures, since in all three cases you take a symbol and choose a lexical scope to put it in.

[Is this really sufficient?]