[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Looking for a shorter mapping expression


Subject: Re: [xsl] Looking for a shorter mapping expression
From: Dimtre Novatchev <dnovatchev@xxxxxxxxx>
Date: Sun, 5 Dec 2004 22:02:37 +1100

On 05 Dec 2004 08:43:44 +0000, Colin Paul Adams
<colin@xxxxxxxxxxxxxxxxxx> wrote:
> >>>>> "Dimtre" == Dimtre Novatchev <dnovatchev@xxxxxxxxx> writes:
> 
>    Dimtre> Because, according to the XPath 2.0 spec: "only the last
>    Dimtre> step in a path is allowed to return a sequence of atomic
>    Dimtre> values."
> 
>    Dimtre> http://www.w3.org/TR/xpath20/#id-path-expressions
> 
> Ah, yes, of course. As usual, I stopped reading too early.
> 
>    Dimtre> <xsl:sequence select= "for $this in $pList1 return
>    Dimtre> f:apply($pFun, $this)" />
> 
> Well, if u want something more compact (why?)?

Small is beautiful. Also the KISS principle.


> 
> for $t in $pList return f:apply ($pFun, $t)
> 
> :-)
> 
> Still not compact enough?
> 
> How about:
> 
> f:apply-2 ($pFun, $pList)
> 
> :-) :-)
> 
> <xsl:function name="f:apply-2">
>   <xsl:param name="pFunc" as="element()"/>
>   <xsl:param name="arg1"/>
> 
>        <xsl:sequence select="for $t in $arg1 return f:apply ($pFun, $t)" />
> </xsl:function>


This is exactly f:map() (the type of arg1 must be item()* ) in the
current version of FXSL.

> 
> Still not compact enough?
> 
> How about:
> 
> f:a ($pFun, $pList)
> 
> :-) :-) :-)
> 
> I don't understand the compactness requirement.


It can be very essential -- if the "/" operator allowed an arbitrary
sequence on the left, then it would be preferrable to f:map()

But I'm not satisfied at all with the currently (un) available ways to
define the type of such higher order  operators in XPath2. It seems to
me that XSD is not going to be helpful at all.

Compare to the strict type definition in Haskell:

        map              ::       (a -> b) -> [a] -> [b]


Cheers,
Dimitre


Current Thread
Keywords