| The more important problem solved by Scheme's macros is
/not/ the one solved by gensym/uniq.  Consider
for example  (let oaf 1
    (when 2 3))
 
With unhygienic macros, this may or may not work 
depending on the definition of WHEN.  There is no 
way of fixing this with UNIQ.  Here is a definition
of WHEN for which the above code breaks  (mac when (test . body)
    `(x ,test (do ,@body))) 
  (mac oaf (test conseq)
     `(if ,test ,conseq))
 
In other words, to use any Arc non-primitive syntax
with any confidence, the programmer has to know the full 
definition of all the macros involved.  In other words,
non-hygienic macros do not define closed  
abstractions.While this may be less of a problem in a multi-namespace Lisp, it certainly becomes more of an issue in a single-namespace language like Arc.  |