До сих пор процедуры и функции рассматривались как текстовые фрагменты программы, определяемые именами. Турбо-Паскаль позволяет вводить переменные специального вида, значениями которых могут служить подпрограммы. Таким образом, Турбо-Паскаль позволяет интерпретировать процедуры и функции как значения, которые можно присваивать переменным и передавать в качестве параметров, причем речь идет именно о последовательности вычислений, а не о значениях, полученных после выполнения подпрограмм.
Общее описание процедурного типа следующее:
Type <имя типа>=Function (<список параметров>):<тип>;
Type <имя типа>=Procedure (<список параметров>);
Механизм процедурных типов предоставляет удобные возможности при разработке программ, но необходимо соблюдать следующие правила.
1. Подпрограмма, присваиваемая процедурной переменной, должна быть оттранслирована в режиме дальнего типа вызова (см. пример ниже).
2. Подпрограмма не должна быть стандартной процедурой или функцией. Это ограничение легко обойти, заключив стандартную подпрограмму в оболочку подпрограммы пользователя.
3. Данные подпрограммы не могут быть вложенными в другие подпрограммы.
4. Такие подпрограммы не могут быть процедурами прерываний.