Re: [xsl] How do I get a SUM of the string-length of all child nodes ??

Subject: Re: [xsl] How do I get a SUM of the string-length of all child nodes ??
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Sun, 29 May 2005 14:03:32 +1000
>  What does map function do?

Formal definition in Haskell prelude (Prelude.hs):

     map              :: (a -> b) -> [a] -> [b]
     map f xs          = [ f x | x <- xs ]


The first line above defines the type (signature) of the "map"
function. It takes two arguments:

   -  a function of type a -> b (with domain "a" and codomain "b"  --
this means that the
      type of thie arguments is "a" and the type of the results is "b")
      Because "map" has an argument, which is a function, "map" is a
higher-order
     function.

  - a list of elements each of type "a"

The type of the result is a list of elements of type "b".

The second line of the definition above defines exactly the map
function. We see that the result of applying a function "map" to its
two arguments -- a function "f" and a list "xs" --  is the set of all
"f x"  (which means f(x))  where "x" belongs to the list "xs"

More informally, we have a list of elements of the same type ("a") and
a function "f", defined on "a" and producing results of type "b".

The result of applying "map" on "f" and a list "xs" (all of whose
elements are of type "a") is another list  "ys" , whose elements "y"
are the results of applying "f" on the corresponding elements "x" of
"xs".


Example:

  map (2 * )  [1,2,3,4]  =  [2,4,6,8]

where (2 *) is a function, which produces twice its argument.

  map string-length ['one', "two", "three", "four"]  =  [3, 3, 5, 4]

then, we'll have:

  sum (map string-length ['one', "two", "three", "four"] ) = 15


> Please explain what does
> sum(f:map(f:string-length(), /*/node())) mean ..

Almost the same as the last line above  -- I hope it is clear now.


Cheers,
Dimitre Novatchev.

Current Thread