Cтраница 3
Из всех языков, обсуждавшихся в этой книге, возможно, исключая Лисп, АПЛ обладает самой простой синтаксической структурой. Каждое определение подпрограммы полностью отделено от других. Подпрограммы взаимодействуют друг с другом только через вызовы во время выполнения. Каждое определение подпрограммы состоит из простой последовательности перенумерованных строк. Каждая строка состоит из одного выражения. Каждое выражение является комбинацией чисел, цепочек литер, переменных, а также префиксных и инфиксных операторов. Вся синтаксическая структура настолько проста и регулярна, что ее могут легко усвоить даже начинающие программисты. [31]
Глобальные идентификаторы могут быть определены двумя способами. При определении подпрограмм их имена автоматически становятся глобальными идентификаторами. Подобные присваивания могут вводиться непосредственно программистом для немедленного выполнения или могут встретиться в выполняемой подпрограмме. Такая структура позволяет добавлять идентификаторы к глобальной среде ссылок в любое время. [32]
Кроме поиска в массивах данных, может быть применен ассоциативный поиск нужной подпрограммы. Для этого определение подпрограммы в системе программирования должно содержать стереотип для ассоциативной выборки, и подпрограмма может выполняться только в том случае, если этот стереотип совпадает с фактическим параметром. Обычно такой механизм используется в системах, планирующих достижение некоторой цели. Пусть каждая подпрограмма способна создать на выходе некоторую структуру данных и эта структура описывается стереотипом, включенным в определение подпрограммы. [33]
Подпрограмма SUM является функцией, возвращающей значение. Возвращаемое значение задается внутри определения подпрограммы путем присваивания его имени подпрограммы. [34]
Существуют два типа параметров: формальные и фактические. Формальные параметры указываются при определении подпрограмм, а фактические - при обращении к ним. При передаче управления на подпрограмму происходит так называемая передача параметров, когда каждому формальному параметру ставится в соответствие фактический параметр. [35]
Программист заканчивает сеанс работы с терминалом. Активная рабочая область, содержащая определение подпрограммы PRIMES, и вектор X первых десяти простых чисел сохраняются в библиотеке рабочих областей программиста под именем CONTINUE. Когда программист начнет следующий сеанс, эта рабочая область будет автоматически загружена как начальная рабочая область. [36]
Все преимущества подпрограмм наиболее ярко проявляются при использовании параметров. Параметр - это фиктивная переменная в определении подпрограммы. Параметр обеспечивает выделение места в памяти, причем идентификация параметра с действительной переменной или константой осуществляется всякий раз при вызове подпрограммы. [37]
При обсуждении передачи параметров нам следует различать фактические параметры ( или аргументы) и формальные параметры. Формальные параметры - это идентификаторы, используемые в определении подпрограммы в качестве имени элемента программы или элемента данных, передаваемого подпрограмме. Формальные параметры обычно описываются в списке формальных параметров в начале определения подпрограммы, причем они непременно должны быть простыми идентификаторами. Фактические параметры - это выражения, используемые в точке вызова подпрограммы для описания передаваемого ей элемента программы или данных. Как было сказано в разд. Могут использоваться и другие обозначения, например инфиксная запись. Для простоты мы примем за основу традиционную префиксную запись и будем говорить о списке аргументов, хотя при другом синтаксисе аргументы могут и не записываться явно в виде списка. [38]
Такая модель более адекватна физической ситуации, когда квантовый компьютер взаимодействует с окружающей средой. Однако в модели с общими преобразованиями матриц плотности возможно более естественное определение подпрограммы для квантового вычисления, поскольку результат работы квантовой схемы - вероятностная функция. [39]
Фактические параметры могут указываться как константы или выражения, если это не противоречит определению или объявлению подпрограммы. Число параметров и их тип также должен соответствовать объявлению или определению подпрограммы. [40]
Рассмотрим теперь случай определения нелокальной среды посредством статической блочной структуры. Вспомним, что в этом случае нелокальная среда зависит от места определения подпрограммы в исходной программе. Примем, что для определения нелокальных сред ссылок во время выполнения используется механизм статической цепи. Когда Q передается R, как параметр, ее среда ссылок в момент передачи определяется статической цепью, соответствующей точке определения Q. Если передавать вместе с Q указатель на эту статическую цепь и восстанавливать этот указатель при вызове Q из R, то получается эффективный метод восстановления правильной нелокальной среды для Q. В процессе передачи параметров Q снова представляет собой пару ( указатель на команды, указатель среды), причем указатель среды указывает на таблицу локальной среды в точке определения Q. Эта таблица определяется в точности так же, как если бы Q вызывалась не из R, а из точки, где Q фигурирует в качестве параметра. [41]
Имеются системные команды, позволяющие перемещать рабочие области из внешней памяти в оперативную память и возвращать их обратно после изменения. Кроме того, имеется возможность индивидуальных ( по имени) перемещений определений подпрограмм и структур дан-ных из рабочей области, хранящейся во внешней памяти в рабочую область, активную в настоящий момент. [42]
Любая обнаруженная ошибка останавливает выполнение подпрограммы, и на терминале пользователя печатается сообщение, содержащее ошибочную инструкцию программы и индикатор ошибки. Программист может немедленно сделать необходимые исправления, например изменить значения данных или определение подпрограммы или прекратить ее выполнение. После того как ошибка исправлена, можно продолжить выполнение программы. Поскольку программист является частью операционной среды, этот простой механизм обработки ошибок чрезвычайно эффективен. Язык вообще не содержит никаких средств для обработки ошибок в подпрограммах - с каждой ошибкой разбирается программист. [43]
Часто используемые трехмерные объекты можно оформлять в виде подпрограмм аналогично тому, как двумерные подпрограммы включаются в структурированный дисплейный файл. Каждое обращение к подпрограмме задает преобразование, которое следует применить к объектам, входящим в определение подпрограммы. [44]
В АПЛ предусмотрены команды редактирования, с помощью которых программист может, когда потребуется, изменять определения подпрограмм. Эти команды позволяют осуществить включение, исключение или замену любой строки или части строки в определении подпрограммы либо во время определения подпрограммы, либо после. [45]