Статья 2311

В последние годы среди программистов-теоретиков инструкция пользуется дурной славой. Это объясняется тем, что программы с большим количеством переходов трудно разобрать, человеку, но не ЭВМ.
Концепция определения процедуры является жизненно важным элементом программирования. Это главный механизм абстракции, процесса перехода от частных примеров, пятиконечная звезда со стороной в 50 единиц к обобщенным понятиям, звезда с некоторым числом концов и с некоторой длиной сторон. Процедура определяется один раз и хранится в памяти только в одном месте, но вызываться она может из многих мест программы, тем самым обеспечивается многократное ее использование. Каждый раз при вызове процедуры точка выполнения перемещается в ту область памяти, где хранится данная процедура. Когда процедура завершается, происходит возврат к выполнению инструкции, непосредственно следующей за инструкцией вызова процедуры. Процедура специального вида, называемая функцией, возвращает в вызывающую программу некоторое значение. Например, функция тангенс.
При вызове ей в качестве параметра дается угол, а в качестве значения она возвращает тангенс этого угла.
Из сотен или тысяч языков программирования только десяток или около того имеет широкое распространение. Показана одна и та же задача, запрограммированная на шести языках, Бейсик, Паскаль, Кобол, Форт, АПЛ и Лисп. Выбор этих языков отчасти обусловлен их широким распространением. Программистов, свободно владеющих ими, довольно много. Пример этих языков хорошо демонстрирует, насколько разнообразны способы, при помощи которых может быть выражена одна и та же идея. В каждом примере я пытался писать в стиле, естественном или удобном для программиста, привыкшего к данному языку.
Задача состоит в том, чтобы просуммировать нечетные числа из некоторого набора целых чисел. Сама по себе она не представляет особого интереса. Она выбрана потому, что ее решение легко запрограммировать на всех этих языках, и потому, что она демонстрирует важные механизмы определения переменных и процедур управления итеративным и условным выполнением.