foldr : ('a -> 'b -> 'c -> 'c) -> ('a, 'b) func -> 'c -> 'c
Folds an operation iteratively over the graph of a finite partial function.
This is one of a suite of operations on finite partial functions, type
('a,'b)func. These may sometimes be preferable to ordinary functions since
they permit more operations such as equality comparison, extraction of domain
etc. If a finite partial function p has graph [x1,y1; ...; xn,yn] then the
application foldl f p a returns
Note that the order in which the pairs are operated on depends on the internal
structure of the finite partial function, and is often not the most obvious.
f x1 y1 (f x2 y2 (f x3 y3 (f ... (f xn yn a) ... )))
- FAILURE CONDITIONS
Fails if one of the embedded function applications does.
Note how the pairs are actually processed in the opposite order to the order in
which they are presented by graph. The order will in general not be obvious,
and generally this is applied to operations with appropriate commutativity
# let f = (1 |-> 2) (2 |=> 3);;
val f : (int, int) func =
# graph f;;
val it : (int * int) list = [(1, 2); (2, 3)]
# foldr (fun x y a -> (x,y)::a) f ;;
val it : (int * int) list = [(2, 3); (1, 2)]
- SEE ALSO
|->, |=>, apply, applyd, choose, combine, defined, dom, foldl,
graph, is_undefined, mapf, ran, tryapplyd, undefine, undefined.