<xsl:stylesheet version="1.0"
  xmlns:xsl  = "http://www.w3.org/1999/XSL/Transform"
  xmlns:exsl = "http://exslt.org/common"
  xmlns:str  = "http://exslt.org/strings"
  xmlns:func = "http://exslt.org/functions"
  xmlns:my   = "urn:my"
  exclude-result-prefixes="exsl str func my"
>

  <xsl:template match="/">
    <xsl:variable name="seq" select="str:tokenize(., ',')"/>

    <xsl:variable name="res" select="exsl:node-set(my:seqSum(0, $seq))"/>
    <seq>
      <xsl:value-of select="$res/*[1]"/>
      <xsl:for-each select="$res/*[position() &gt; 1]"
        >, <xsl:value-of select="."/></xsl:for-each>
    </seq>  
  </xsl:template>

  <func:function name="my:seqSum">
    <xsl:param name="sum"/>
    <xsl:param name="seq"/>

    <xsl:choose>
      <xsl:when test="count($seq) = 1">
        <func:result>
          <a><xsl:copy-of select="$sum + $seq[1]"/></a>
        </func:result>
      </xsl:when>
      <xsl:otherwise>
        <xsl:variable name="mid" select="floor(count($seq) div 2)"/>

        <func:result>
          <xsl:variable name="lftres" select=
            "exsl:node-set(my:seqSum($sum, $seq[position() &lt;= $mid]))"/>
          <xsl:copy-of select="$lftres"/>
          <xsl:copy-of select=
            "my:seqSum($lftres/*[last()], $seq[position() &gt; $mid])"/>
        </func:result>
      </xsl:otherwise>
    </xsl:choose>
  </func:function>

</xsl:stylesheet>
