Ok after 2 minutes more of thought I guess the response will most likely be 
"which integer will you be referencing in the result of the metafunction" -- so 
maybe it can be an error to use an unadorned pattern variable twice in a 
pattern?

On 05/01/2012 05:45 PM, Jon Rafkind 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

Reply via email to