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

Re: [plt-scheme] assertions and the learning of macro-fu



Sorry to reactivate an old thread, but I just got around to trying this:

Quoth Matthew Flatt:
> At Sun, 12 May 2002 22:37:50 -0400, Don Blaheta wrote:
> > (define-syntax (assert stx)
> >     [...]
> >     (syntax-case stx (assert not)
> >       [(assert not x) (handle-assert stx #f (syntax (assert x)))]
> >       [(assert x)     (handle-assert stx #t (syntax (assert x)))])))
> >
> > [...]
> 
> To fix the problem, change your pattern-matching rule to use
> `module-or-top-identifier=?' (from the "stx.ss" library in the "syntax"
> collection) for comparing literals:
> 
>  (require "stx.ss" "syntax")

What is this?  It seems to try to import two different modules, one
named "stx" in the current-directory file "stx.ss", and one named
"syntax".  Neither exists in any of the mz libraries I could find....

>  (define-syntax (assert stx)
>      [...]
>      (syntax-case* stx (not) module-or-top-identifier=?
>        [(assert not x) (handle-assert stx #f (syntax (assert x)))]
>        [(assert x)     (handle-assert stx #t (syntax (assert x)))])))
> 
> Another solution would be to compare `not's symbolically, ignoring
> lexical bindings. That might be appropriate in this case, because `not'
> isn't in an expression position (unlike `else' in `cond').

I still don't understand what is meant by "expression position" here.

-- 
-=-Don Blaheta-=-=-dpb@cs.brown.edu-=-=-<http://www.cs.brown.edu/~dpb/>-=-
A man's home is his castle, in a manor of speaking.