I think I found a clearer way of talking about this. This rule:

(define-syntax-rule
    (test (x y ...) ...)
    '(((x y) ...) ...))

Has more than one possible meaning. But it can be clarified using explicit 
subscripts. It could mean either this (which is what I expected):

(define-syntax-rule
    (test (x_j y_j_i ...i) ...j)
    '(((x_j y_j_i) ...i) ...j))

Or this (which is what Racket does):

(define-syntax-rule
    (test (x_j y_j_i ...i) ...j)
    '(((x_i y_j_i) ...i) ...j))

I'm surprised that x's subscript changed between the pattern and the 
template.

Ryan, thanks for the interesting example. Made explicit, it becomes:

((x_j x_i ...i) ...j)

although figuring out how to label that was tricky and I don't know how to 
do it in general, or even if it can be done for all valid syntax rules.

Matthias: the algorithm I was thinking of is the Macro-by-Example algorithm 
that Ryan pointed out, which is neither of yours. Decompose the environment 
at the outer ellipsis. I take back my claim that it's the most obvious 
algorithm, though.

On Tuesday, March 27, 2018 at 6:05:12 PM UTC-4, Ryan Culpepper wrote:
>
> On 03/27/2018 11:46 PM, Ryan Culpepper wrote: 
> > On 03/27/2018 10:01 PM, Justin Pombrio wrote: 
> >> I'm surprised by the behavior of using a pattern variable under one 
> >> set of ellipses in the pattern, and under two sets of ellipses in the 
> >> template: 
> >> [...] 
>
> BTW, it looks like Macro-By-Example[1] describes the behavior that you 
> expected. See the definitions in the second column of page 4. 
>
> Ryan 
>
> [1] "Macro-By-Example: Deriving Syntactic Transformations from their 
> Specifications" by Eugene Kohlbecker and Mitchell Wand. 
> ftp://www.cs.indiana.edu/pub/techreports/TR206.pdf 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to