On Mon, 2009-06-22 at 12:45 +1000, Ramana Kumar wrote:
> Derick are there any flaws in this simplification of your (and Aziz's) idea?

(The tricks are Aziz's.  I only fixed a bug in them by combining them.)

> (library (some suitable name)
>   (export free-identifier-bound?)
>   (import (rnrs) (rnrs eval))
>   (define free-identifier-bound?
>     (let ((empty-ctxt (eval '(syntax id) (environment '(only (rnrs) 
> syntax)))))
>       (lambda (id)
>         (unless (identifier? id)
>           (assertion-violation 'free-identifier-bound? "not an identifier" 
> id))
>         (or (free-identifier=? id #'syntax)
>           (not (free-identifier=? id
>                  (datum->syntax empty-ctxt
>                    (syntax->datum id)))))))))

That's broken because:

(import (rename (rnrs) (syntax rnrs:syntax)))
(free-identifier-bound? (rnrs:syntax syntax))
=> #T

but `syntax' is not bound.

The eval approach could be made to work by following the predicate I
posted.  It would buy needing to specially handle a few less identifiers
and not needing the tiny auxiliary libraries.  Some people might not
like using eval when libraries can do it.

-- 
: Derick
----------------------------------------------------------------


_______________________________________________
r6rs-discuss mailing list
[email protected]
http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss

Reply via email to