[racket] need workaround for bug in match w/ list-no-order and a repeating pattern
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 <zenspider at 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