[plt-scheme] Algebraic patterns
Okay, you're right. Using quote to disambiguate between function application
and data doesn't work on the left hand side of defines.
> (define (quasiquote y) 3)
> `9
3
Paul
At Tue, 1 Oct 2002 14:49:41 -0400, Eli Barzilay wrote:
> On Oct 1, Paul Graunke wrote:
> > I would have expected something like
> > (define `(x y) (list 1 2))
> > or
> > (define `(,x ,y) (list 1 2))
>
> Currently I hacked
>
> (define '(x y) (list 1 2))
>
> to work, but I'm not really happy with it -- but I agree with you -- I
> think that the second one above is much better. To do that, I think
> that the best thing would be to use the quasiquote expander itself and
> use the result -- but only do this for quasiquotes or redefining
> macros would not be possible... (And I don't know if expand-once is
> reliable enough for this.)
>
>
> > Also,
> > (define (x y) (list 1 2))
> > would be the same as
> > (define x (lambda (y) (list 1 2)))
>
> It is, unless you wrote the above meaning that `x' is a meta variable
> and that it should be true for all possible (identifier) values...
>
>
> > It's a bit more clunky, but quote is the usual way to distinguish
> > between using ()'s for application or lists. Maybe a different
> > default is needed?
>
> I'm confused. I think that the quasiquote thing should work in any
> case -- even if you think that making (define (list x y) ...) not
> redefine `list' is a bad choice, you might consider the same decision
> limited to (define (quasiquote ...) ...) as a better one. Or maybe
> you mean add some `define*' form that will always look at patterns?
> (Which is a bad name since the "*" doesn't do the same it does to
> `let', but define-pattern is too verbose...)
>
> (Apologies in advance for the weird grammar in the above paragraph...)
>
> --
> ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
> http://www.barzilay.org/ Maze is Life!