Структура и интерпретация компьютерных программ [Харольд Абельсон] (pdf) читать постранично Книга в формате pdf ! Изображения и текст могут не отображаться!
[Настройки текста] [Cбросить фильтры]
Цвет фона черный светло-черный бежевый бежевый 2 персиковый зеленый серо-зеленый желтый синий серый красный белый
Цвет шрифта белый зеленый желтый синий темно-синий серый светло-серый тёмно-серый красный
Размер шрифта 14px 16px 18px 20px 22px 24px
Шрифт Arial, Helvetica, sans-serif "Arial Black", Gadget, sans-serif "Bookman Old Style", serif "Comic Sans MS", cursive Courier, monospace "Courier New", Courier, monospace Garamond, serif Georgia, serif Impact, Charcoal, sans-serif "Lucida Console", Monaco, monospace "Lucida Sans Unicode", "Lucida Grande", sans-serif "MS Sans Serif", Geneva, sans-serif "MS Serif", "New York", sans-serif "Palatino Linotype", "Book Antiqua", Palatino, serif Symbol, sans-serif Tahoma, Geneva, sans-serif "Times New Roman", Times, serif "Trebuchet MS", Helvetica, sans-serif Verdana, Geneva, sans-serif
Насыщенность шрифта жирный
Обычный стиль курсив Ширина текста 400px 500px 600px 700px 800px 900px 1000px 1100px 1200px Показывать меню Убрать меню Абзац 0px 4px 12px 16px 20px 24px 28px 32px 36px 40px
Межстрочный интервал 18px 20px 22px 24px 26px 28px 30px 32px
Harold Abelson
and
Gerald Jay Sussman
with
Julie Sussman
Structure and Interpretation
of Computer Programs
The MIT Press
Cambridge, Massatchusetts
New York
The McGraw-Hill Companies, Inc.
St.Louis
San Francisco
Montreal
London, England
Toronto
Харольд Абельсон
Джеральд Джей Сассман
при участии
Джули Сассман
Структура и интерпретация
компьютерных программ
Добросвет, 2006
3
Эта книга посвящается, с уважением и любовью, духу, который живет внутри
компьютера.
“Мне кажется, чрезвычайно важно, чтобы мы, занимаясь информатикой, получали радость от общения с компьютером. С самого начала это было громадным удовольствием. Конечно, время от времени встревали заказчики, и
через какое-то время мы стали серьезно относиться к их жалобам. Нам стало
казаться, что мы вправду отвечаем за то, чтобы эти машины использовались
успешно и безошибочно. Я не думаю, что это так. Я считаю, что мы отвечаем
за то, чтобы их тренировать, указывать им новые направления и поддерживать уют в доме. Я надеюсь, что информатика никогда не перестанет быть
радостью. Я надеюсь, что мы не превратимся в миссионеров. Не надо чувствовать себя продавцом Библий. Таких в мире и так достаточно. То, что Вы
знаете о программировании, могут выучить и другие. Не думайте, что в ваших руках ключ к успешной работе с компьютерами. Что у Вас, как я думаю
и надеюсь, есть — это разум: способность увидеть в машине больше, чем Вы
видели, когда Вас впервые к ней подвели, увидеть, что Вы способны сделать
ее бóльшим.”
Алан Дж. Перлис (1 апреля 1922 – 7 февраля 1990)
Оглавление
Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
Предисловие ко второму изданию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Предисловие к первому изданию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1. Построение абстракций с помощью процедур . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1. Элементы программирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.1. Выражения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.2. Имена и окружение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.3. Вычисление комбинаций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.4. Составные процедуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.5. Подстановочная модель применения процедуры . . . . . . . . . . . . . . . . . . . .
1.1.6. Условные выражения и предикаты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.7. Пример: вычисление квадратного корня методом Ньютона . . . . . . . . . .
1.1.8. Процедуры как абстракции типа «черный ящик» . . . . . . . . . . . . . . . . . . .
1.2. Процедуры и порождаемые ими процессы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1. Линейные рекурсия и итерация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.2. Древовидная рекурсия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.3. Порядки роста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.4. Возведение в степень . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.5. Нахождение наибольшего общего делителя . . . . . . . . . . . . . . . . . . . . . . . .
1.2.6. Пример: проверка на простоту . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. Формулирование абстракций с помощью процедур высших порядков . . . . . .
1.3.1. Процедуры в качестве аргументов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.2. Построение процедур с помощью lambda . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.3. Процедуры как обобщенные методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.4. Процедуры как возвращаемые значения . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
25
26
27
29
31
33
35
40
43
47
48
53
58
59
62
64
69
70
74
78
83
2. Построение абстракций с помощью данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1. Введение в абстракцию данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1. Пример: арифметические операции над рациональными числами . . . .
2.1.2. Барьеры абстракции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90
93
93
97
5
Оглавление
6
2.2.
2.3.
2.4.
2.5.
2.1.3. Что значит слово «данные»? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
2.1.4. Расширенный пример: интервальная арифметика . . . . . . . . . . . . . . . . . . . 102
Иерархические данные и свойство замыкания . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
2.2.1. Представление последовательностей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
2.2.2. Иерархические структуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
2.2.3. Последовательности как стандартные интерфейсы . . . . . . . . . . . . . . . . . . 120
2.2.4. Пример: язык описания изображений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Символьные данные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
2.3.1. Кавычки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
2.3.2. Пример: символьное дифференцирование . . . . . . . . . . . . . . . . . . . . . . . . . . 149
2.3.3. Пример: представление множеств . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
2.3.4. Пример: деревья
Последние комментарии
1 час 40 минут назад
2 часов 35 минут назад
2 часов 38 минут назад
13 часов 29 минут назад
13 часов 31 минут назад
1 день 2 часов назад