This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: mapping (Was: Re: Re: . in for)
- From: Dimitre Novatchev <dnovatchev at yahoo dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Wed, 9 Jan 2002 04:58:13 -0800 (PST)
- Subject: [xsl] RE: mapping (Was: Re: Re: . in for)
- Reply-to: xsl-list at lists dot mulberrytech dot com
> > but this organisation doesn't make it particularly easy to pipe
> > functions together (or at least not in a similar way to location
> > paths).
>
> I'm sure David C or Dimitre could extend this to a piped form?
> Guessing,
> select='map (fnA(), (map (fnb(), $departments)))'
>
> which maps function A over the result set of mapping function b
> over $departments?
In my earlier message "Higher-order function support as means to reduce the
"standard" operators/functions":
http://sources.redhat.com/ml/xsl-list/2002-01/msg00199.html
it was shown how one could write the map function from scratch if XPath supported
higher-order functions.
map :: [a] -> [a]
map f = foldl ((:).f ) [ ]
The piping mentioned above is implemented by another function -- multiMap:
multiMap :: [a] -> [a -> a] -> [a]
multiMap xs fs = foldr map xs fs
It is ***so easy*** to express new functions in a language which has higher-order
functions!
And the piping above will be expressed as:
select='multiMap ($departments,
(fnA(), fnb(), ... , fnX())
)'
In another message it was also shown how to optimise a long 'piping' of maps into a
single map:
(map f1)
<<.>> (map f2)
............
<<.>> (map fN) $sequence
is equal to:
map (f1 <<.>> f2 ... <<.>> fN) $sequence
where <<.>> is the functional composition operator.
Certainly, multiMap can be modified to take advantage of this optimisation.
>
> Like this more and more!
It is easy to fall in love with FP.
Cheers,
Dimitre Novatchev.
__________________________________________________
Do You Yahoo!?
Send FREE video emails in Yahoo! Mail!
http://promo.yahoo.com/videomail/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list