[racket] empty in patterns
On Wed, Sep 29, 2010 at 8:14 AM, Shriram Krishnamurthi <sk at cs.brown.edu> wrote:
> Is it correct that one can write (cons a d) in a pattern, but not empty? Thus,
>
> (define (insert-many ns s)
> (match ns
> [(? empty?) s]
> [(cons a d) (insert a
> (insert-many d s))]))
>
> works but
>
> (define (insert-many ns s)
> (match ns
> [empty s]
> [(cons a d) (insert a
> (insert-many d s))]))
>
> does not have the intended semantics. This seems unfortunate given
> that we've adopted HtDP-style lists, as opposed to traditional Scheme
> lists, into Racket wholesale.
I'm not sure what this last statement means, but all `match' special
forms come after a paren, and so that pattern can't work. Note that
`null', if that's what you mean by "traditional Scheme lists", doesn't
have special meaning in `match either. If you're ok with:
[(empty) s]
then you can write a match expander to do that.
--
sam th
samth at ccs.neu.edu