Структура и интерпретация компьютерных программ
Авторы - Харольд Абельсон и Джеральд Джей Сассман при участии Джули Сассман
1 Построение абстракций с помощью процедур
1.1 Элементы программирования
1.2 Процедуры и порождаемые ими процессы
2 Построение абстракций с помощью данных
2.1 Введение в абстракцию данных
2.1.4 Расширенный пример: интервальная арифметика
показать упражнения
показать упражнения
- 2.7 Верхняя и нижняя границы интервала
- 2.8 Разность интервалов
- 2.9 Радиус интервала
- 2.10 Интервал, пересекающий ноль
- 2.11 Знаки конечных точек интервалов
- 2.12 Интервал по среднему значению и погрешности
- 2.13 Погрешность в процентах произведения двух интервалов
- 2.14 Различные результаты по формулам для параллельных резисторов
- 2.15 Формула без повторений переменных предстовляющих неточную величину
- 2.16 Общий случай разных результатов в эквивалентных выражениях
2.2 Иерархические данные и свойство замыкания
2.3 Символьные данные
2.3.3 Пример: представление множеств
показать упражнения
показать упражнения
- 2.59 Объединение множеств представленных неупорядоченными списками
- 2.60 Множество как список с повторяющимися элементами
- 2.61 Добавление элемента в множество представленное упорядоченным списком
- 2.62 Объединение множеств представленных упорядоченными списками
- 2.63 Преобразование дерева в список
- 2.64 Процедура partial-tree
- 2.65 Процедуры для множеств реализованных бинарными деревьями
- 2.66 Процедура lookup
2.4 Множественные представления для абстрактных данных
2.5 Системы с обобщенными операциями
2.5.3 Пример: символьная алгебра
показать упражнения
показать упражнения
- 2.87 =zero? для многочленов
- 2.88 Вычитание многочленов
- 2.89 Процедуры для плотных многочленов
- 2.90 Обобщенные операции над списками термов
- 2.91 Деление многочленов с одной переменной
- 2.92 Сложение и умножение многочленов с несколькими переменными
- 2.93 Обобщенные операции в пакете арифметики рациональных чисел
- 2.94 Обобщенная операция
- 2.95 Псевдоделение
- 2.96 Множитель целости
- 2.97 Алгоритм как процедура
3 Модульность, объекты и состояние
3.1 Присваивание и внутреннее состояние объектов
3.2 Модель вычислений с окружениями
3.3 Моделирование при помощи изменяемых данных
3.4 Параллелизм: время имеет значение
3.4.2 Механизмы управления параллелизмом
показать упражнения
показать упражнения
- 3.39 Сохранившиеся исходы
- 3.40 Все возможные значения x
- 3.41 Сериализованный make-account
- 3.42 Изменение make-account
- 3.43 Временные диаграммы
- 3.44 Задача переноса денег с одного счета на другой
- 3.45 Переопределение объекта-счёта
- 3.46 Нарисуйте временную диаграмму
- 3.47 Реализации семафоров
- 3.48 Serialized-exchange с использованием метода избежания тупиков
- 3.49 Сценарий, в котором механизм избежания тупиков не работает
3.5 Потоки
3.5.2 Бесконечные потоки
показать упражнения
показать упражнения
- 3.53 Описание элементов потока
- 3.54 Процедура mul-streams
- 3.55 Процедура partial-sums
- 3.56 Задача Хэмминга о порождении чисел
- 3.57 Сложения при вычислении чисел Фибоначчи
- 3.58 Интерпретация потока
- 3.59 Степенныe ряды представленные в виде бесконечных потоков
- 3.60 Перемножение последовательностей
- 3.61 Процедура invert-unit-series
- 3.62 Процедура div-series
3.5.3 Использование парадигмы потоков
показать упражнения
показать упражнения
- 3.63 Эффективность процедуры sqrt-stream
- 3.64 Процедура stream-limit
- 3.65 Три последовательности приближений к натуральному логарифму 2
- 3.66 Порядок пар в потоке
- 3.67 Модификация процедуры pairs
- 3.68 Альтернативное определение pairs
- 3.69 Процедура triples
- 3.70 Функция взвешивания
- 3.71 Числа Рамануджана
- 3.72 Поток чисел, которые можно записать как сумму двух квадратов
- 3.73 RC-цепь
- 3.74 Переходы входного сигнала через ноль
- 3.75 Сглаживание сигнала
- 3.76 Процедура smooth
4 Метаязыковая абстракция
4.1 Метациклический интерпретатор
4.2 Scheme с вариациями: ленивый интерпретатор
4.3 Scheme с вариациями — недетерминистское вычисление
4.3.2 Примеры недетерминистских программ
показать упражнения
показать упражнения
- 4.38 Измените процедуру multiple-dwelling
- 4.39 Порядок ограничений в процедуре multiple-dwelling
- 4.40 Эффективность порождения вариантов
- 4.41 Решите задачу о проживании
- 4.42 Решите задачу "Лгуньи"
- 4.43 Кто отец Лорны?
- 4.44 Недетерминистская программа для решения «задачи о восьми ферзях»
- 4.45 Пять разборов предложения
- 4.46 Порядок вычисления операндов
- 4.47 Альтернативный вариант parse-verb-phrase
- 4.48 Дополнение грамматики
- 4.49 Порождение предложений
4.4 Логическое программирование
4.4.4 Реализация запросной системы
4.4.4.8 Кадры и связывания
показать упражнения
показать упражнения
- 4.71 Явные операции delay в simple-query и disjoin
- 4.72 Чередование потоков
- 4.73 Явное испольование delay во flatten-stream
- 4.74 Упрощенная версия stream-flatmap
- 4.75 Особая форма unique
- 4.76 Раздельная обработка двух подвыражений запроса and
- 4.77 «Задержанная» фильтрация
- 4.78 Язык запросов в виде недетерминистской программы
- 4.79 Метод применения правил который использует окружения
5 Вычисления на регистровых машинах
5.1 Проектирование регистровых машин
показать упражнения
показать упражнения
5.2 Программа моделирования регистровых машин
показать упражнения
показать упражнения
5.4 Вычислитель с явным управлением
5.5 Компиляция
5.5.6 Лексическая адресация
показать упражнения
показать упражнения
- 5.39 Процедуры lexical-address-lookup и lexical-address-set!
- 5.40 Поддержка окружения времени компиляции
- 5.41 Процедура find-variable
- 5.42 Compile-variable и compile-assignment с командами лексической адресации
- 5.43 Компилятор и просмотр внутренних определений
- 5.44 Изменение компилятора с явным кодированием
5.5.7 Связь скомпилированного кода с вычислителем
показать упражнения
показать упражнения
- 5.45 Качество компилятора
- 5.46 Эффективность компиляции для процедуры Фибоначчи с древовидной рекурсией
- 5.47 Модифицируем вычислитель
- 5.48 Примитив compile-and-run
- 5.49 Регистровая машина
- 5.50 Метациклический интерпретатор
- 5.51 Рудиментарная реализация Scheme на C
- 5.52 Scheme компилятор в последовательности команд C