Η συνάρτηση fold

Η συνάρτηση fold "διπλώνει" μια σειρά στοιχείων σε μια τιμή με βάση μια συνάρτηση από στοιχείο και τιμή σε τιμή και μια αρχική τιμή. Αν η συνάρτηση είναι η f, η αρχική τιμή α και η σειρά αποτελείται από τα στοιχεία: σ1, σ2, σ3 ... τότε η νέα σειρά θα είναι: f(...,f(σ3, f(σ2, f(σ1, α))))...

Για παράδειγμα με βάση τη συνάρτηση fold και αντίστοιχη συνάρτηση f μπορούμε εύκολα να βρούμε το άθροισμα των στοιχείων ενός πίνακα:

program TestFold;
{$F+}
const
        maxindex = 10;
type
        realmap = function(x : real; y : real) : real;
        mylist = array [1..maxindex] of real;
var
        i : integer;
        l : mylist;
function fold(f : realmap; a : real; v : mylist) : real;
var
        i : integer;
        result : real;
begin
        result := a;
        for i := 1 to maxindex do
                result := f(v[i], result);
        fold := result;
end;
function sum(x : real; y : real) : real;
begin
        sum := x + y
end;
begin
        for i := 1 to maxindex do
                readln(l[i]);
        writeln(fold(sum, 0, l))
end.