
3.5.
Процедуры
237
Для того чтобы отличить процедуры, в которых все пара-
метры опущены, от обыкновенных операторов, в
алголе-68
перед
ними
ставят двоеточие. При вызове обозначение такой про-
цедуры записывается прямо
между
точками с запятой или скоб-
ками-уголками.
Опуская неизменные параметры
avar
и
nvar
рекурсивной
процедуры pot из
3.5.2,
мы получим рекурсивную процедуру ро
без параметров. Её можно использовать в подпрограмме
potz
в
формулировке, представленной на рис. 124. И в рекурсивной
процедуре то из 3.5.2 также можно опустить оба неизменных
параметра
uvar
и war.
Эффект
процедуры с опущенными параметрами-перемен-
ными
всецело зависит от предыстории. Поскольку подавление
параметров-переменных
ведёт
к побочным эффектам, которые
легко упустить из
виду,
не стоит применять его бездумно. В ча-
стности, при
частичном,
подавлении параметров-переменных мо-
жет случиться так, что останется незамеченным нарушение за-
прета отождествлений, как в следующем примере процедуры
„удвоения"
с глобальным параметром-переменной п:
proc
r/des=(var
int и):
procedure
уде (var и :
integer);
begin
и :=и * 2;
«:=«+ 1
end
В последовательности вызовов
удв(а);
удв(Ь);
удв(а);
удв(п)
последний нарушает запрет отождествлений (и
даёт
п:=2Х
п + 1, что явно не совпадает с тем, что мы ожидаем).
3.5.7.
Процедуры
как
средство
структурирования
Процедуры представляют собой полезное средство членения
программного текста. Программистская методика, делающая
упор на работу с программными переменными (например, по
соображениям машинной аргументации), склонна к выдвижению
процедур на передний план как самостоятельных конструкций.
(Это,
в частности, относится к случаю, когда желательно по-
стоянно
печатать результаты в
ходе
исполнения некоторой про-
цедуры. Здесь было бы лучше выразить в явном виде, что в ка-
честве результата желательно иметь последовательность объек-
тов.) Процедуры как средство организации иерархической
структуры особенно важны в паскале, где они являются единст-
венным
пригодным для этой цели инструментом. В качестве