Just in case it was unclear I was hoping people would explicitly adorn pattern variables if they want to match the same term.
(simple integer_1 integer_1) But if (simple integer integer) to match the same term twice is a heavily used form then so be it.. On 05/01/2012 05:52 PM, Robby Findler wrote: > This is heavily relied on. > > Robby > > On Tue, May 1, 2012 at 6:45 PM, Jon Rafkind <rafk...@cs.utah.edu> wrote: >> The default matching behavior of patterns in redex will try to match >> duplicate pattern variables to the same term. Thus >> >> #lang racket >> >> (require redex) >> >> (define-language Z [x integer]) >> (define-metafunction Z >> simple : integer integer -> integer >> [(simple integer integer) 1]) >> >> (term (simple 1 2)) >>> simple: no clauses matched for (simple 1 2) >> Won't match because the pattern (simple integer integer) will match the >> first `integer' to 1, and wants to the second reference to `integer' to the >> same thing. To get it to work I need to adorn the pattern variables with _1 >> and _2 to make them unique. >> >> (define-language Z [x integer]) >> (define-metafunction Z >> simple : integer integer -> integer >> [(simple integer_1 integer_2) 1]) >> >> I would prefer (if possible) if the default behavior treated unadorned >> pattern variables as fresh so that I don't have to remember to attach a >> suffix. I guess this might break existing programs but I can't imagine >> anyone really relies on this behavior (unadorned variables matching >> duplicate terms). >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users