Hi all,
Please look at following link, for description of XPath 3.1
function fn:fold-right(),
https://www.w3.org/TR/xpath-functions-31/#func-fold-right
Within this function's description, its mentioned
The effect of the function is equivalent to the following implementation
or its equivalent in XSLT:
<xsl:function name="fn:fold-right" as="item()*">
<xsl:param name="seq" as="item()*"/>
<xsl:param name="zero" as="item()*"/>
<xsl:param name="f" as="function(item(), item()*) as item()*"/>
<xsl:choose>
<xsl:when test="fn:empty($seq)">
<xsl:sequence select="$zero"/>
</xsl:when>
<xsl:otherwise>
<xsl:sequence select="$f(fn:head($seq), fn:fold-right(fn:tail($seq),
$zero, $f))"/>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
I've a feeling, that above XSLT logic of this function may be wrong
(particularly the line <xsl:sequence select="$f(fn:head($seq),
fn:fold-right(fn:tail($seq), $zero, $f))"/>. But I'll appreciate if anyone
may point me wrong). I propose the following new XSLT code for this
function,
<xsl:function name="fn:fold-right" as="item()*">
<xsl:param name="seq" as="item()*"/>
<xsl:param name="zero" as="item()*"/>
<xsl:param name="f" as="function(item(), item()*) as item()*"/>
<xsl:choose>
<xsl:when test="fn:empty($seq)">
<xsl:sequence select="$zero"/>
</xsl:when>
<xsl:otherwise>
<xsl:sequence select="fn:fold-right(fn:subsequence($seq, 1,
fn:count($seq)-1), $f($seq[fn:last()], $zero), $f)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
I wanted to raise this issue on this spec's bugzilla. But I wanted to make
sure that I'm right, by asking the question here first.
--
Regards,
Mukul Gandhi
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--