How to construct separators?

When using multi-valued arguments, you will know about separators to divide the single elements from each other.

group otter;
connective(phi) ::= <<(<phi; separator="&">)>>

Assume phi = ["P(a)","P(b)"], you will get:
(P(a)&P(b))

Besides strings that are hard-coded in the template, you can also use variable separators:

group otter;
connective(app, phi) ::= <<(<phi; separator=app>)>>

Giving app = "&" (though you can assign whatever you want), it delivers:
(P(a)&P(b))

Someday you might want to use a concatenation of multiple strings as the separator for an arbitrary long multi-valued argument.
If you e.g. want to insert some extra spaces, you can make the separator to be a combination like " "+app+" ", as in:

group otter;
connective(app, phi) ::= <<(<phi; separator=" "+app+" ">)>>

which should deliver:
(P(a) & P(b))