This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: mapping (Was: Re: Re: . in for)


> > 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]