>  (define (bound-identifier? id) (and (id->label id) #t))
Why the (and <> #t) wrapper?

On Fri, Jun 19, 2009 at 4:14 PM, Abdulaziz Ghuloum<aghul...@gmail.com> wrote:
>
> On Jun 19, 2009, at 2:27 AM, Derick Eddington wrote:
>
>> On Thu, 2009-06-18 at 22:55 +0300, Abdulaziz Ghuloum wrote:
>>>
>>>   (define (unbound-identifier? x)
>>>     (and
>>>       (free-identifier=? x (datum->syntax a.ctxt (syntax->datum x)))
>>>       (free-identifier=? x (datum->syntax b.ctxt (syntax->datum x))))))
>>
>> That's clever, but it's broken:
>
> oops.
>
>> It seems PLT and Ypsilon are broken about this because an unbound a.cons
>> and a bound a.cons must not be free-identifier=?.
>
> Actually, I didn't expect that definition to work at all for PLT and
> Larceny since their notion of free-identifier=? is very different from
> Ikarus's (w.r.t. phases of identifiers: whether a bound identifier in
> level x is free-identifier=? to the same identifier bound in level y,
> etc.), so, maybe you have to do
>  (import (for (prefix (rnrs) a.) (meta -1)))
> in the two auxiliary libraries.
>
> For ypsilon, there are definitely bugs: in t.ss, you see that "let"
> is bound, while if you test for "cons", you find it unbound.
>
>> I'm thinking there should be a standard (or common and portable with
>> compat libraries) primitive identifier-bound? predicate.
>
> We first need to establish if it can be implemented in pure R6RS or
> not.  In psyntax, it can be implemented as easily as:
>
>  (define (bound-identifier? id) (and (id->label id) #t))
>
> or we can use the previous definition using generate-temporaries.
> But I'm still curious about a portable and pure R6RS solution.
>
> BTW, in Larceny, you cannot do something like
>
> (when-unbound (x)
>  (define x ---))
>
> It complains that "Definition of identifier that may have already
> affected meaning of undeferred portions of body".  This is allowed
> by the report (with a "should" iirc).
>
> Aziz,,,
>

Reply via email to