Основные идеи 3
2. Элементарный Лисп 11
3. Интерпретатор 25
4. Функционалы 40
5. Имена и контексты 52
6. Свойства атомов 60
7. Детализация определений 80
8. Компиляция программ 87
9. Реализационные детали 96
10. От ФП к ООП 104
11. Недетерминизм 115
12. Управление процессами 122
13. Функции высших порядков 130
14. Макетирование и тесты 142
15. Парадигмы программирования 147
Литература 165
Учебное пособие разработано при поддержке Интернет-Университета Информационных технологий и
опубликовано в серии «Основы информационных технологий» в 2004 году.
Курс разработан на базе Факультета информационных технологий Новосибирского госуниверситета. Содержание курса соответствует PF1, PL7, PL3 классификатора CC2001CS.
2
Лекция 1. Основные идеи
В этой лекции дается общее представление о функциональном программировании и
сфере его применения, включая анализ основных понятий и принципов и их
иллюстрацию на материале истории языка Лисп, его диалектов, наследников и
реализаций. Рассматривается роль функциональных программ в жизненном цикле
программного обеспечения и эволюции информационных технологий, а также
перспективы функционального подхода к совершенствованию информационных
cистем. Идея функционального программирования опирается на интуитивное представление о
функциях как о достаточно общем механизме представления и анализа решений сложных
задач. Механизм функций основательно изучен математиками, и это позволяет
программистам наследовать выверенные построения, обладающие предельно высокой
моделирующей силой. Систематическое применение функционального
программирования впервые достаточно ярко было продемонстрировано Джоном Мак-
Карти и его учениками в методах реализации языка Лисп и программирования на этом
языке [1]. Наиболее очевидные из этих методов были успешно ассимилированы другими
языками и системами программирования. Обычно про функциональное
программирование вспоминают при смене технологий, когда возрастает роль
аналитики и исследовательских задач. В настоящее время часто употребляют термин
<функциональность> при сравнительной характеристике информационных систем, что,
видимо, свидетельствует о проявлении новой метрики, заслуживающей отдельного
рассмотрения [2]. Функциональный стиль объединяет разные подходы к определению процессов
вычисления на основе достаточно строгих абстрактных понятий и методов символьной
обработки данных. Связь функционального программирования с математическими
основами позволяет в тексте программы наследовать доказательность построения
результата - если она достигнута, причем с использованием разных методов
абстрагирования решаемой задачи [3,4].