Функциональное программирование

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

В книге английских специалистов рассмотрены проблемы аппликативного программирования, существенно повышающего интеллектуальность разрабатываемых программ по сравнению с традиционным программированием. При этом спецификация предметной области существенно упрощает труд программиста. Особое внимание уделяется вопросам реализации функциональных языков, основанных на лямбда-исчислении Черча. В качестве базового языка рассматривается функциональный язык Норе, имеющий простой и ясный синтаксис. Изложение сопровождается многочисленными примерами конкретных программ. Для программистов как начинающих, так и профессионалов, а также специалистов в области информатики.

Author(s): Филд А, Харрисон П
Publisher: Мир
Year: 1993

Language: Russian
Pages: 639
City: Москва

Предисловие редактора перевода 5
Предисловие . . 6

Часть I. Программирование с помощью функций 8
Введение . 8

Глава 1. Введение в функции 11
1.1. Чистые функции 11
1.2. Функциональность 17
Резюме 19

Глава 2. Введение в функциональное программирование. Язык Норе 20
2.1. Введение понятия функции 20
2.2. Кортежи . . 23
2.3. Рекурсивные функции . 27
2.4. Объявляемые инфиксные операторы 29
2.5. Квалифицированные выражения 30
2.6. Типы данных, определяемые пользователем 33
2.7. Доказательства по индукции 49
Резюме . . . . 52
Упражнения . . 52

Глава 3. Функции высшего порядка 55
3.1. Примеры рекурсии . 56
3.2. Связывание .... 61
3.3. Другие примеры рекурсии 61
3.4. Пример применения 64
Резюме 69
Упражнения 69

Глава 4. Виды вычислений . 71
4.1. Понятие строгости . 72
4.2. Обработка «бесконечных» структур данных 74
4.3. Сети процессов . 79
4.4. Вычисление с «неизвестным» 83
Резюме . 85
Упражнения . 86

Глава 5. Другие стили функционального программирования 88
5.1. Miranda 89
5.2. Лисп 95
5.3. FP 103
Резюме - - 115
Упражнения 115

Часть II. Реализация . 117
Введение. 117

Глава 6. Математические основы: Л-исчисление 120
6.1. Введение и синтаксис 121
6.2. Вычисление Я-выражений 123
6.3. Порядок редукций и нормальные формы 127
6.4. (З-Редукция и проблема конфликта имен 132
6.5. Обход проблемы конфликта имен 135
6.6. Эффект разделения 137
6.7. Рекурсивные выражения 140
6.8. Чистое Л-исчисление 144
6.9. Л-исчисление де Брёйна 148
Резюме 149
Упражнения 150

Глава 7. Система вывода типов и проверка типов 153
7.1. Неформальное введение в проверку типов 154
7.2. Система вывода типов 160
7.3. Алгоритм проверки типа W 164
7.4. Расширения W для практической проверки типов . . . .172
7.5. Ограничения W 175
Резюме 176
Упражнения 177

Глава 8. Промежуточные формы 179
8.1. Промежуточный код для функциональных языков .... 180
8.2. Абстрактные синтаксические деревья 181
8.3. Трансляция языка Норе в промежуточный код 183
8.4. Трансляция сопоставления с образцом 185
8.5. Поиск наиОолее подходящего образца 195
8.6. Литеральные образцы 200
8.7. О порядке тестирования 201
Резюме 203
Упражнения 204

Глава 9. Методы интерпретации 206
9.1. Абстрактное представление промежуточного кода . . . 206
9.2. Энергичный интерпретатор 208
9.3. Ленивый интерпретатор 218
Резюме 225
Упражнения 226

Глава 10. Реализация на основе стеков — SECD-машина 228
10.1. SECD-машина ! 229
10.2. Ленивая SECD-машина 240
10.3. Корректность реализации SECD-машины 245
Резюме 253
Упражнения 253

Глава 11. Введение в редукцию графов 256
11.1. Представление лямбда-выражений в виде графов . . . 257
11.2. Правила редукции графов 262
11.3. Интерпретаторы, основанные на редукции графов . . . 272
11.4. Проблема свободных переменных 285
11.5. Параллельная редукция графов 287
Резюме . . . 288
Упражнения 289

Глава 12. Комбинаторная редукция 291
12.1. Основы комбинаторной логики и редукция 292
12.2. Оптимизация Карри и редукция комбинаторных графов
Тернера 296
12.3. Представление рекурсии 308
12.4. Строки направляющих 317
Резюме 321
Упражнения 322

Глава 13. Новейшие комбинаторные реализации . . . . 325
13.1. Абстрагирование свободных переменных простым л-удалением 326
13.2. Суперкомбинаторы 331
13 3. Оптимизация суперкомбинаторных реализаций 334
13.4. Категорийные комбинаторы 343
13 5. Модификации КАМ 355
Резюме 357
Упражнения 358

Глава 14. Потоковые реализации 360
14.1. Функциональный поток данных аппликативного порядка 361
14.2. Функциональный поток данных нормального порядка . . 377
14.3. Сравнение с другими моделями . . . . = 381
Резюме 382
Упражнения 383

Глава 15. Компиляции функциональных языков 385
15 1. Структура компилированной программы 336
15.2. МФП-система 389
15.3. G-машина 415
Резюме 434
Упражнения 434

Глава 16. Сборка мусора 437
16.1. Организация памяти 438
16.2. Сканирующая сборка мусора 442
16.3. Копирующие сборщики мусора 444
16.4. Сборщики мусора с подсчетом ссылок 463
Резюме 469"
Упражнения 470



Часть III. Оптимизация 472
Введение 472

Глава 17. Преобразование программ и операционный подход .... 478
17.1. Трансформационная методология раскрутки/скрутки . 480
17.2. Управление системой раскрутки/скрутки — метаязык пре-
образований .... 488
17.3. Преобразование типов данных 490
Резюме 499
Упражнения 499

Глава 18. Алгебраическое преобразование программ 502
18.1. Абстрагирование от переменных 504
18.2. Аксиомы алгебры FP и уравнения функционального
уровня 506
18.3. Линейная функция и теорема о линейном расширении . . 510
18.4. Итерационные формы линейных функций . . .... 515
18.5. Другие применения 525
18.6. Преобразование передачей продолжений 530
Резюме 535
Упражнения 536

Глава 19. Запоминание . 539
19.1. Принципы работы и основные трудности 540
19.2. Ленивые мемо-функции 543
19.3. Управление размером мемо-таблины 548
19.4. Сборка мусора для мемо-таблиц 556
Резюме 559
Упражнения . . . . 559

Глава 20. Абстрактная интерпретация 561
20.1. Общие принципы 561
20.2. Анализ строгости 565
20.3. Доказательства надежности 572
20.4. Другие применения для оптимизации программ .... 575
Резюме 578
Упражнения . 578

Приложение А. Краткое описание языка Норе 580
А.1. БНФ языка Норе . 580
А.2. Предварительно определенные типы и функции .... 583

Приложение Б. Основы теории доменов 586
Б.1. Введение 586
Б.2. Законченный частичный порядок и непрерывные функции 587
Б.З. Конструкции на доменах: новые домены из старых . . . 589
Б.4. Наименьшие фиксированные точки 591

Приложение В. Формальная семантика 593
8.1. Денотационная семантика Я-исчисления 594
8.2. Денотационная семантика функциональных языков программирования 597
8.3. Конструируемые типы данных 600
8.4. Сопоставление с образцом 601
Решение некоторых упражнений 604

Литература 621
Предметный указатель 625