guile-devel
[Top][All Lists]
Advanced

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

Re: define-syntax


From: Marco Maggi
Subject: Re: define-syntax
Date: Wed, 16 Jun 2010 09:35:25 +0200

"Ludovic Courtès" wrote:
>  (define-syntax +
>    (let ((plus +))

I am assuming you are starting the program with:

(import (rnrs))

or you are importing at level 1 a library which exports "+";
if this is  the case, and you want  R6RS compatibility, IMHO
this should fail because  you are redefining the binding for
"+";  many R6RS  implementations agree  with this  (with the
exception of Ypsilon which has hygiene problems and must not
be taken as model).

  Notice that  bindings from  "(rnrs)" are imported  at both
levels 0 and 1[1]:

    For  the libraries  defined in  the library  report, the
    export  level   is  0  for  nearly   all  bindings.  The
    exceptions are syntax-rules, identifier-syntax, ..., and
    _ from  the (rnrs base (6)) library,  which are exported
    with  level 1, set!  from the  (rnrs base  (6)) library,
    which is exported with levels  0 and 1, and all bindings
    from  the  composite  (rnrs  (6)) library  (see  library
    chapter on “Composite library”), which are exported with
    levels 0 and 1.

  As  a side  note: the  existence  of the  binding for  the
keyword can be recorded by  SYNTAX in the right-hand side of
a DEFINE-SYNTAX, so  that the binding itself is  can be used
to refer to the context of the definition:

  (import (rnrs))

  (define ciao 123)

  (define-syntax this
    (lambda (stx)
      (syntax-case stx ()
        ((_)
         (datum->syntax #'this 'ciao)))))

  (write (this))
  (newline)

and also:

  (import (rnrs))

  (define ciao 123)

  (define-syntax this
    (let ((ctx #'this))
      (lambda (stx)
        (syntax-case stx ()
          ((_)
           (datum->syntax ctx 'ciao))))))

  (write (this))
  (newline)

for this kind  of things, I suggest taking  the behaviour of
Larceny as model: if it works with it, it will probably work
with all the other R6RS implementations.

HTH

[1] <http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-10.html#node_sec_7.2>
-- 
Marco Maggi



reply via email to

[Prev in Thread] Current Thread [Next in Thread]