What is the reason for using syntax-rules instead of syntax-parse? (To maintain 
RnRs compatibility?)

RAC

On Aug 9, 2011, at 8:15 AM, Neil Van Dyke <n...@neilvandyke.org> wrote:

> BTW, for future readers... in this example:
> 
> (define-syntax if*
> (syntax-rules (then else)
>   ((_ ?test (then ?consequent) (else ?alternate))
>    (if ?test ?consequent ?alternate))))
> 
> The "?" part of the pattern variables is just a naming convention of 
> individual programmers.  The "?" is the first character of the pattern 
> variable identifier, not special syntax.
> 
> I've tried various naming conventions here, including "?".  Once my macro 
> clauses got large, with a mix of a number of pattern variables as well as 
> Racket identifiers to be captured, I settled on making the pattern variable 
> identifiers all-upppercase:
> 
> (define-syntax if*
> (syntax-rules (then else)
>   ((_ TEST (then CONSEQUENT) (else ALTERNATE))
>    (if TEST CONSEQUENT ALTERNATE))))
> 
> This example is too small too appreciate the difference, with "if" being the 
> only Racket identifier.  Imagine you had a "syntax-rules" clause with block 
> of code with 20 Racket identifiers in it, and 3 pattern variables.  You'd 
> want the pattern variables scattered throughout this to really stand out.  At 
> least on my screen, all-caps does that better than "?", and all-caps also 
> takes up less horizontal space, which can get to be an issue with patterns 
> that you're trying to keep to a single line for readability symmetries.  
> Anyone else looking at the code will instantly see which convention you're 
> using, so you can use whatever you want.
> 
> I have a few more useful conventions for "syntax-rules", from which people 
> can pick&choose depending on the situation and preferences, but no time today 
> to type them.  Typing them up might have to wait for pounding out a chapter 
> of my tentative practical Racket book.  (Not trying to sell anything; book 
> will be free in Scribble format, probably as a PLaneT package that installs 
> the book into your searchable local copies of Racket documentation.)
> 
> -- 
> http://www.neilvandyke.org/
> 
> _________________________________________________
> For list-related administrative tasks:
> http://lists.racket-lang.org/listinfo/users
_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to