Эх, эмбаркадера им лямбды с дженериками дала — используй лямбды с дженериками, используй — не хочу.
Код:
function demo(f1, f2: TFunc<integer, Integer>): integer;
begin
result := f1(f2(1)); // compose functions
end;
...
foo := demo(
function (a: integer): integer
begin
result := a+1;
end,
function (a: integer): integer
begin
result := a-1;
end)
...
использование лямбд из переменных
f1 = function (a: integer): integer
begin
result := a+1;
end;
f2 = function (a: integer): integer
begin
result := a-1;
end;
bar = demo(f1, f2)