[R6RS] Internal DEFINE vs. macros

Michael Sperber sperber
Mon Apr 25 04:37:18 EDT 2005


dyb at cs.indiana.edu writes:

> The price we pay for powerful language features is that the power can be
> abused to write obscure code.  Internal define-syntax adds to the power,
> so it adds to the risk of obscure code.  Used properly, however, it leads
> to clearer code, just like internal define, syntax-rules, include, etc.

The problem is that you haven't convinced me that internal DEFINE,
INCLUDE, and internal DEFINE-SYNTAX are a great help writing clearer
code.  You seem to regard this as an obvious axiom, but it isn't
obvious to me.  (I'm not convinced of the opposite, either, but I sure
feel uneasy at this point.)  To make the difference clearer:

- I avoid internal DEFINE about the same way I avoid DO.  When I do, I
  often make mistakes because the semantics isn't clear to me.

- I only use an INCLUDE-like facility in highly-controlled
  circumstances equivalent to the FILES form in the Scheme 48 module
  language.  (Which enforces the restriction I abide to.  Which may
  prove your point in this instance or mine, take your pick.)

- I almost invariably find code that is less deeply nested easier to
  read than more deeply nested code.  (And I usually use the module
  system to make my code less deeply nested.)  This also means
  less internal definitions in many circumstances.

For internal DEFINE-SYNTAX, I haven't seen an example yet where it
will make code clearer as compared to code that uses LET-SYNTAX or
LETREC-SYNTAX.  That may be because I haven't seen many examples of
internal DEFINE-SYNTAX yet at all: a cursory grep in the PLT
collection hierarchy revealed none, and the portable syntax-case
implementation also has none.  (For the reasons described in this
thread, DEFINE-SYNTAX occurring at the top level of the body of a
top-level module doesn't count.)  So I'm hoping you'll indulge me and
help me out with a few examples :-)

-- 
Cheers =8-} Mike
Friede, V?lkerverst?ndigung und ?berhaupt blabla


More information about the R6RS mailing list