Harold Abelson and Gerald Jay Sussman with ... - ftp.linux.kiev.ua.
Harold Abelson and Gerald Jay Sussman with ... - ftp.linux.kiev.ua.
Harold Abelson and Gerald Jay Sussman with ... - ftp.linux.kiev.ua.
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
гим известных языках программирования (programming lang<strong>ua</strong>ges), описывающих<br />
задачи, которые мы хотим поручить процессам.<br />
На исправно работающем компьютере вычислительный процесс выполняет программы<br />
точно и безошибочно. Таким образом, подобно ученику чародея, программисты-новички<br />
должны научиться понимать и предсказывать последствия своих<br />
заклинаний. Даже мелкие ошибки (их обычно называют блохами (bugs) или глюками<br />
(glitches)), могут привести к сложным и непредсказуемым последствиям.<br />
К счастью, обучение программированию не так опасно, как обучение колдовству,<br />
поскольку духи, с которыми мы имеем дело, надежно связаны. В то же<br />
время программирование в реальном мире требует осторожности, профессионализма<br />
и мудрости. Например, мелкая ошибка в программе автоматизированного<br />
проектирования может привести к катастрофе самолета, прорыву плотины или<br />
самоуничтожению промышленного робота.<br />
Специалисты по программному обеспечению умеют организовывать программы<br />
так, чтобы быть потом обоснованно уверенными: получившиеся процессы будут<br />
выполнять те задачи, для которых они предназначены. Они могут изобразить поведение<br />
системы заранее. Они знают, как построить программу так, чтобы непредвиденные<br />
проблемы не привели к катастрофическим последствиям, а когда эти<br />
проблемы возникают, программисты умеютотлаживать (debug) свои программы.<br />
Хорошо спроектированные вычислительные системы, подобно хорошо спроектированным<br />
автомобилям или ядерным реакторам, построены модульно, так<br />
что их части могут создаваться, заменяться и отлаживаться по отдельности.<br />
Программирование на Лиспе<br />
Для описания процессов нам нужен подходящий язык, и с этой целью мы используем<br />
язык программирования Лисп. Точно так же, как обычные наши мысли<br />
чаще всего выражаются на естественном языке (например, английском, французском<br />
или японском), а описания количественных явлений выражаются языком<br />
математики, наши процедурные мысли будут выражаться на Лиспе. Лисп был<br />
изобретен в конце 1950-х как формализм для рассуждений об определенном типе<br />
логических выражений, называемых уравнения рекурсии (recursion eq<strong>ua</strong>tions),<br />
как о модели вычислений. Язык был придуман Джоном Маккарти и основывается<br />
на его статье «Рекурсивные функции над символьными выражениями и их<br />
вычисление с помощью машины» (McCarthy 1960).<br />
Несмотря на то, что Лисп возник как математический формализм, это практический<br />
язык программирования. Интерпретатор (interpreter) Лиспа представляет<br />
собой машину, которая выполняет процессы, описанные на языке Лисп. Пер-<br />
21