[stringtemplate-interest] "rest" and template recursion

Sasha Crosland sasha.crosland at gmail.com
Fri May 30 20:22:46 PDT 2008


Hi everyone,

I had been having difficulty getting template recursion to work as I had
hoped it would, and when I searched briefly for anything addressing this
topic in the list archives, I found that others had apparently had a similar
problem to mine.  From what I gathered, the problem is not to do with
recursion itself, but with use of the "rest" operator on a multi-valued
attribute, which I have been trying to use in the implementation of my
recursive template.  Something to do with "rest" returning an iterator
instead of a list?

What I want to do is to generate the names of Java types such as "Fn<P1,
Fn<P2, Fn<P3, R>>>," which I am using as a "curried" representation of a
three-argument function with type P1 x P2 x P3 -> R.  I tried to define a
template called curriedFnType taking a single attribute called arity, which
is a list of integers such that arity[i] = i for i from 1 to length(arity).

curriedFnType(arity) ::= <<
<if(arity)>
Fn\<P<first(arity)>, <curriedFnType(arity=rest(arity))>\>
<else>
R
<endif>
>>

The problem is that for an arity of four ([1,2,3,4]), for example, the
template is instantiated to "Fn<P1, Fn<P2, Fn<P4, R>>>", which somehow skips
over P3.  I encounter similar quirkiness with whatever sort of recursive
template I try to implement in this manner.  And I don't think that using
the colon operator to apply a template to the multi-valued arity attribute
will work directly, will it?, since we aren't dealing with tail-recursion.
The alternative

curriedFnType2(arity) ::= "<arity:{Fn\<P<it>, }>R<arity:{\>}>

seems to work, but, to be honest, it feels rather lame that I should have to
resort to this.  Can anybody shed any light on the issue?  Is this indeed a
bug, or am I overlooking something?  I am using StringTemplate 3.1.


Sasha
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org:8080/pipermail/stringtemplate-interest/attachments/20080530/8921f976/attachment.html 


More information about the stringtemplate-interest mailing list