Unfortunately, non-linear patterns (when you use a pattern variable
more than one) and `list-no-order` don't work well together, and
probably won't in the forseeable future.  Supporting this moves
`match` from a pattern matcher into a general search procedure, and
requires quite different algorithms.

For your first example, I'd write:

    (match '(1 1) [(list b b*) #:when (equal? b b*) 'x])

This doesn't work for the larger example you're trying to implement,
which I would just write as a search procedure yourself.

The fact that this doesn't produce a good error message is definitely
a problem, which I'll try to fix soon.

Sam

On Tue, Feb 4, 2014 at 4:27 AM, Ryan Davis <zenspi...@gmail.com> wrote:
> https://github.com/plt/racket/issues/562
>
> takikawa helped reduce the reproduction down to:
>
>   (match '(1 1) [(list-no-order b b) 'x])
>
> but what I'm actually trying to do is:
>
>   (match '(...
>            (nand b b w1)
>            ...
>            (nand w1 w1 w2)
>            ...)
>     [(list-no-order `(nand ,a ,a ,b)
>                     `(nand ,b ,b ,c) rest ...)
>      <rewrite c to a in rest>]
>     [else 'bad])
>
> I'm assuming that this bug is legit, but I know that match is incredibly 
> powerful and assume some sort of workaround for this problem exists. Or there 
> is the possibility of another tool that I don't yet know about. I just want 
> to get this project off the ground to show that it can work. Suggestions / 
> workarounds welcome. Thanks.
>
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to