Содержание книги "Проектирование гибких программ
:
как не загнать себя в угол"
Предисловие
Предисловие авторов
Благодарности
1. Гибкость в природе и в проектировании
1.1 Архитектура вычислений
1.2 Гибкость через умные компоненты
1.3 Избыточность и дублирование
1.4 Исследовательское поведение
1.5 Цена гибкости
2. Специализированные языки
2.1 Комбинаторы
2.1.1 Комбинаторы функций
2.1.2 Комбинаторы и планы строения
2.2 Регулярные выражения
2.2.1 Комбинаторный язык регулярных выражений
2.2.2 Реализациятрансля тора
2.3 Обертки
2.3.1 Обертки со специализацией
2.3.2 Реализацияоберток
2.3.3 Адаптеры
2.4 Абстракцияпредметной области
2.4.1 Монолитнаяреализация
2.4.2 Абстрагирование предметной области
2.5 Заключение
3. Вариации на арифметическую тему
3.1 Арифметика на комбинаторах
3.1.1 Простой интегратор ОДУ
3.1.2 Настройка арифметических операций
3.1.3 Сочетание разных арифметик
3.1.4 Арифметика на функциях
3.1.5 Сложности с комбинаторами
3.2 Расширяемые полиморфные процедуры
3.2.1 Полиморфная арифметика
3.2.2 Структура зависит от порядка!
3.2.3 Реализацияполиморфных процедур
3.3 Пример: автоматическое дифференцирование
3.3.1 Как работает автоматическое дифференцирование
3.3.2 Производные n-местных функций
3.3.3 Технические детали
3.3.4 Функции-литералы от дифференциальных аргументов
3.4 Эффективность полиморфных процедур
3.4.1 Префиксные графы
3.4.2 Кеширование
3.5 Эффективные типы, определяемые пользователем
3.5.1 Предикаты как типы
3.5.2 Отношениямежду предикатами
3.5.3 Предикаты как ключи для диспетчеризации
3.5.4 Пример: игра-бродилка
3.6 Заключение
4. Сопоставление с образцом
4.1 Образцы
4.2 Переписывание термов
4.2.1 Сегментные переменные в алгебре
4.2.2 Реализациясистем правил
4.2.3 Ремарка: волшебные макросы
4.2.4 Вызов, управляемый образцами
4.3 Устройство сопоставителя
4.3.1 Компиляция образцов
4.3.2 Ограничения на переменные сопоставления
4.4 Унификация
4.4.1 Как работает унификация
4.4.2 Приложение: вывод типов
4.4.3 Как работает вывод типов
4.4.4 Эксперимент: добавляем сегментные переменные
4.5 Сопоставление с образцом на графах
4.5.1 Списки как графы
4.5.2 Реализация графов
4.5.3 Сопоставление на графах
4.5.4 Шахматные доски и альтернативные перспективы для графов
4.5.5 Шахматные ходы
4.5.6 Реализациясопост авленияна графах
4.6 Заключение
5. Вычисление
5.1 Полиморфный интерпретатор eval/apply
5.1.1 eval
5.1.2 apply
5.2 Процедуры с нестрогими аргументами
5.3 Компиляция в исполнительные процедуры
5.4 Исследовательское поведение
5.4.1 amb
5.4.2 Реализация amb
5.5 Явная работа с нижележащими продолжениями
5.5.1 Продолженияк ак нелокальные возвраты
5.5.2 Нелокальнаяпереда ча управления
5.5.3 От продолжений к amb
5.6 Власть и ответственность
6. Слои
6.1 Использование слоевой структуры
6.2 Реализацияслоев
6.2.1 Многослойные данные
6.2.2 Многослойные процедуры
6.3 Слоенаяарифметик а
6.3.1 Арифметика единиц измерения
6.4 Отслеживание зависимостей между значениями
6.4.1 Слой поддержки
6.4.2 Хранение обоснований
6.5 Что обещает многослойность
7. Распространение информации
7.1 Пример: расстояния до звезд
7.2 Механизм распространения
7.2.1 Ячейки
7.2.2 Распространители
7.3 Альтернативные точки зрения
7.4 Слияние значений
7.4.1 Слияние базовых значений
7.4.2 Слияние значений с поддержкой
7.4.3 Слияние множеств значений
7.5 Поиск в возможных мирах
7.5.1 Перебор с возвратами, управляемый зависимостями
7.5.2 Решение комбинаторных задач
7.6 Распространители поддерживают дублирование
8. Эпилог
A Программное обеспечение
B Scheme
B.1 Базовые конструкции Scheme
B.2 Более сложные конструкции
Литература
Предметный указатель