Да не, тут проще.
Можно описать функуцию/процедуру внутри другой функции/процедуры. Она будет "видна" только внутри этой функции и может видеть параметры функции. Например:
Код:
function IncParam(a : integer) : integer;
function IncPositive : Integer;
begin
Result := a + 1;
end;
function IncNegative : Integer;
begin
Result := a - 1;
end;
begin
if a >= 0 then Result := IncPositive Else Result := IncNegative;
end;