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

Re: Introductory material on hygienic macros in dr scheme

From: "Chris Wright" <caw@cs.mu.oz.au>
> I guess I'm looking for something a little more gentle than what's in the
> help desk, that might show show some "old-style"  common lisp macros would
> look if converted to the r5 style:

'The Scheme Programming Language' and
'Chez Scheme User Guide'  contains two good
chapters on macros. Both are available from

> eg:
> (defmacro while (test &rest body)
>     `(do ()
>         ((not ,test))
>        ,@body))

(define-syntax while
  (syntax-rules ()
    ((_ test expr ...)
     (do ()
  ((not test))
       expr ...))))


I have a question myself on macros.
mzscheme 200alpha9 gives:

> (let-syntax ((foo
  (syntax-rules ()
    ((_ x) (bar x)))))
    (define x 33))
begin (possibly implicit): no expression after a sequence of internal
definitions in: ((define x 33))

While the same expression works in Chez, where the (define x ...) is
top level.

>From reading the r5rs is not clear to me which behaviour is correct.

I have some code that depends on the Chez behaviour, and I am
wondering if I had it working only by luck.