Передачу функций поддерживает, но не так. Нужно либо задать явно имя типа функции и использовать его, либо указать тип полностью в заголовке.
1.
type MyFuncType=function(x: int):string;
function foo(x: int):string; {функция типа, совпадающего с MyFuncType }
begin
{some code}
end;
procedure boo (f : MyFuncType);
begin
{some code}
end;
begin
boo(foo);
end.
2.
function foo(x: int):string; {функция, которую будем передавать }
begin
{some code}
end;
procedure boo (function f (x: int) : string);
begin
{some code}
end;
begin
boo(foo);
end.
Код компилировать не пытался, написано из общих соображений.
То, что ты пытаешься делать, по-моему, вообще нарушает конвенции паскаля по объявлению переменных.
upd. опередили
Добавлено через 8 минут и 57 секунд:Выхода вижу два:
первый - использовать этот ключ, т.к. он задаёт "дальнюю" адресацию (то есть влияет на принцип сборки программы, чтобы переданная по значению функция вызывалась)
второй - передавать указатель на функцию, тогда этот ключ, наверное, не будет нужен (хотя за давностью всех дел, не уверен, пусть поправят).
И, кстати, зачем у тебя сложение и вычитание записаны процедурами, тогда как это по семантике функции? То есть, у них есть аргументы и результат, а не аргументы и побочное действие.