24.03.2015 Views

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.

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!