Next: Ref API, Previous: Partial Application, Up: Higher-Order Functions [Contents]
xmlns:f="http://mikegerwitz.com/hoxsl/apply"
Alias of f:thrushr.
Definition:
<function name="f:thrush" as="item()"> <param name="list" as="item()+" /> <sequence select="f:thrushr( $list )" /> </function>
xmlns:f="http://mikegerwitz.com/hoxsl/apply"
Given a list of the form (value, f1, f2, ...), return
the result ...(f2(f1(value)))
If list consists only of value, simply return
value. Any number of functions may be provided in list
to form a pipeline; the result of the final application will be
returned.
All functions must be unary; partial application should be
used to provide beginning arguments. For example, this would yield
the value 5:
<sequence select="f:thrush( 5, f:partial( f:add(), 4 ) )" />
See the apply-gen stylesheet for auto-generating curried
functions to simplify the above partial application.
Definition:
<function name="f:thrushr" as="item()"> <param name="list" as="item()+" /> <sequence select="_f:thrushr-fold( subsequence( $list, 2 ), $list[ 1 ] )" /> </function>
xmlns:_f="http://mikegerwitz.com/hoxsl/apply/_priv"
Definition:
<function name="_f:thrushr-fold" as="item()">
<param name="fnref" as="item()*" />
<param name="result" />
<choose>
<when test="empty( $fnref )">
<sequence select="$result" />
</when>
<otherwise>
<!-- FIXME: need abstraction -->
<variable name="next" as="item()*" select="subsequence( $fnref, f:length( $fnref ) + 1 )" />
<!-- map the next unary function to the previous result, then
pass that result along for further mapping -->
<sequence select="_f:thrushr-fold( $next, f:partial( $fnref, $result ) )" />
</otherwise>
</choose>
</function>