Cтраница 2
Набор встроенных примитивных операций может быть обычным образом расширен с помощью определений подпрограмм. [16]
Алгол ( и частично ПЛ / 1) иллюстрируют вложенную структуру программ, при которой определения подпрограмм в главной программе выступают в качестве деклараций и могут в свою очередь содержать другие вложенные определения подпрограмм на любом уровне. Такая общая организация программы непосредственно связана с ярко выраженным в Алголе стремлением к структурированным инструкциям, но фактически служит другой цели. [17]
Практически все универсальные алгоритмические языки содержат одинаковое для всех средство описания новых операций - аппарат определения подпрограмм и функций, поэтому различие между ними лежит в области средств описания новых типов данных. [18]
Определение подпрограммы служит образцом для построения во время выполнения ее активации - Обычно результатом обработки определения подпрограммы транслятором является постоянная часть, содержащая выполняемые команды, константы и другие составные части программы, которые одинаковы во всех активациях, и шаблон активационной записи, представляющий ту часть подпрограммы, которая зависит от активации. Когда во время выполнения происходит вызов подпрограммы, этот шаблон используется при построении активационной записи для новой активации подпрограммы. В типичной активационной записи предусмотрено место для локальных данных подпрограммы, параметров, точки возврата, временной памяти и различных элементов системной информации. Акти-вационная запись вместе с постоянной частью подпрограммы составляют активацию этой подпрограммы. [19]
В АПЛ предусмотрены команды редактирования, с помощью которых программист может, когда потребуется, изменять определения подпрограмм. Эти команды позволяют осуществить включение, исключение или замену любой строки или части строки в определении подпрограммы либо во время определения подпрограммы, либо после. [20]
Вводимые команды представляют собой смесь системных ко-манд, выражений АПЛ, которые нужно вычислить немедленно, определений подпрограмм и структур данных, которые нужно сохранить для последующего использования, и вызовов подпрограмм, определенных ранее. Таким образом, главная программа, вводимая программистом, содержит как элементы обычной главной программы, так и те элементы, которые в средах пакетной обработки находятся в программе управления заданием. Выражения АПЛ и вызовы подпрограмм соответствуют элементам обычной главной программы, в то время как определения подпрограмм, определения структур данных и системные команды соответствуют элементам обычной программы управления заданием. [21]
Для определения подпрограммы в активной рабочей области необходимо ввести системную команду, переводящую систему в режим определения подпрограммы, а вслед за ней спецификацию имени подпрограммы и инструкции, образующие ее тело. [22]
Другой компонентой операционной среды АПЛ является редактор, который программист может использовать для ввода или модификации определений подпрограмм. Для того чтобы подключиться к редактору, программист вводит строку, начинающуюся с символа V. После этого он взаимодействует с редактором до тех пор, пока не будет введен другой символ V. Пример начального ввода и редактирования подпрограммы приведен в разд. [23]
Перед тем, как рассматривать различные варианты структур, управляющих подпрограммами, следует провести важное различие между определением подпрограммы и активацией подпрограммы. [24]
Говоря о языках программирования общего назначения, авторы имеют в виду, что такие языки программирования легко могут быть адаптированы для решения самых разных задач, возможно, путем определения новых подпрограмм и типов данных. Большие программные комплексы обычно содержат набор подпрограмм-примитивов, реализующих базовый набор операций над используемыми объектами, отражающими специфику решаемой задачи. Такой набор подпрограмм-примитивов фактически представляет собой специализированный диалект используемого языка программирования, ориентированный на решение определенной задачи. [25]
Алгол ( и частично ПЛ / 1) иллюстрируют вложенную структуру программ, при которой определения подпрограмм в главной программе выступают в качестве деклараций и могут в свою очередь содержать другие вложенные определения подпрограмм на любом уровне. Такая общая организация программы непосредственно связана с ярко выраженным в Алголе стремлением к структурированным инструкциям, но фактически служит другой цели. [26]
Наиболее извеотная форма связи программ и подпрограмм по управлению объясняется часто правилом копирования: эффект выполнения вызова подпрограммы тот же самый, кик золи бы этот вызов перзд выполнением был заманен копией тела подпрограммы с соответствующими подстановками для параметров и совпадающих идентификаторов / 13 /, Практически же бывает целесообразно хранить определение подпрограммы в одном экземпляре, а в точках вызова организовать переход на начало подпрограммы о возвратом в ту же точку. Таким образом, копирование оказывает то же действие, чго и вызо-ь подпрограммы, Эффективность использования о точки зрения памяти id времени выполнения этих способов управления различна. [27]
Чистый Лисп - это простое подмножество Лиспа, состоящее из ( 1) основных примитивов CAR, CDR, CONS, EQ и ATOM; ( 2) управляющих структур, использующих COND, рекурсию и суперпозицию функций; ( 3) списковых структур, содержащих только атомы и подсписки, без чисел или списков свойств и ( 4) примитивов LABEL и LAMBDA для определения подпрограмм. С помощью такого подмножества может быть выполнена большая часть обычной обработки списков в Лиспе. Чистый Лисп фактически является универсальным языком, смысл этого понятия мы обсудим более подробно в гл. [28]
Подпрограммы могут определяться в любой момент во время выполнения программы. Определение подпрограммы осуществляется довольно просто. [29]
Программист очищает свою рабочую область от предыдущей работы. Все определения подпрограмм и структур данных, введенные ранее и явно не сохраненные в библиотеке рабочих областей, уничтожаются. [30]