Непейвода Н.Н. Программирование. Раздел 3

Непейвода Н.Н. Программирование. Страница 369

Пусть, к примеру, описана процедура Р с параметромпроцедурой Q: procedure Р ( procedureQ ); begin

Q(R); { В этой строке, с точки зрения языка Pascal,содержится }

{ошибка, т. к. в определении параметра Qне указано, что им } {является процедура с параметром }

end;

Вызов такой процедуры корректен, если в качестве ее фактического пара­метра используется процедура с параметром. В противном случае ошибочен оператор Q(R). Отсутствие в спецификации процедуры Р информации о виде возможных параметров параметрапроцедуры Qне позволяет контролиро­вать, какие фактические параметры могут подставляться вместо формальной процедуры Q. В частности, оказывается допустимым оператор P(S), если в программе имеется описание

Если употребление оператора P(S) не приводит к опосредованной ре­курсии Р, то вычисление этого оператора не дает рекурсии. В то же время, сама процедура Р годится для использования в качестве своего фактического параметра. Вызов Р(Р) формально не является ошибочным (в рамках сделан­ных предположений, но не с точки зрения РаэсаГя). Однако его вычисление может привести к выполнению оператора Q(R), где Q — формальный па­раметрпроцедура, и, следовательно, к порождению еще одного экземпляра Р до завершения выполнения предыдущего экземпляра, т. е. к рекурсии Р. Таким образом, в одном случае обращение к Р является рекурсивным, а в другом — нет. И ситуации, когда Р надо транслировать как рекурсивную, а когда — как нерекурсивную, не распознаваемы путем анализа текстов про­цедур.

Если процедуры, подобные Р, предлагаются в качестве библиотечных, когда, в принципе, невозможно предусмотреть заранее, как будут употреб­ляться подпрограммы, то это может привести к существенной потере эф­фективности библиотеки. Следует отметить, что алгоритмы таких подпро­грамм трудны для понимания. Все это приводит к тому, что рекурсия че­рез параметры редко используется в практике программирования. Поэтому зачастую в языках не разрешается употреблять параметрыподпрограммы. Однако прямолинейные запреты средств такого рода затрудняют задание полезных алгоритмов, в которых желательно подключение внешних вычис­лений для выполнения тех или иных действий (классический пример — вычисление определенных интегралов, когда подынтегральная функция яв­ляется параметром). Гибкий путь преодоления недостатков рекурсии через параметры — это более глубокие спецификации параметровподпрограмм, что и предлагается в стандарте описания языкаPascal.

Новости

  • 1
  • 2
Prev Next

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

24.01.2016

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

Роскосмос не планирует в течение ближайшего десятилетия осуществлять пуск тяжёлой ракеты-носителя А...

Ученые РФ опровергли выводы исследований о вреде ГМО

24.01.2016

Ученые РФ опровергли выводы исследований о вреде ГМО

Исследователи из Института проблем передачи информации (ИППИ РАН) проанализировали несколько самых п...

Летающие "Крокодилы"

24.01.2016

Летающие "Крокодилы"

20 удивительных фактов о боевом вертолете Ми-24.Этот вертолет стал таким же узнаваемым символом сове...

В Аргентине описали новый вид динозавра-гиганта

24.01.2016

О ранее неизвестном виде динозавра, относящемуся к инфраотряду зауроподов, рассказали аргентинские п...

Реклама