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