Pattern variables that occur in subpatterns followed by one or more
instances of the identifier h<ellipsis> are allowed only in subtemplates
that are followed by as many instances of <ellipsis>.
The problem is that arg is singly-nested in the pattern, but
doubly-nested in the template.
Kawa does support an extension for different nesting levels, meant to support
things like (x (y ...) ...) => (((x y) ...) ...). However, in that case the x
varies by the outer "index":
((x0 (y00 y01)) (x1 (y10 y11 y12)))
==> (((x0 y00) (x0 y01)) ((x1 y10) (x1 y11) (x1 y12)))
But for define-facts the single-nested arg needs to vary with the
*inner* index. I.e. you would need Kawa to expand the example to:
==> (((x0 y00) (x1 y01)) ((x0 y10) (x1 y11) (x2 y12))) ; Oops no x2
But Kawa doesn't do that.
On 03/10/2017 11:04 AM, Per Bothner wrote:
> Obviously, Kawa should not throw ArrayIndexOutOfBoundsException,
> but should instead report an error. So that is a Kawa bug.
I fixed Kawa to print an error message in this case, rather than
The message isn't as helpful as I'd like. One complication is that
pattern variable names aren't available at macro-expansion time.
This could be changed, but it isn't a priority right now.