Рекурсивные функции и структуры . . . . . . . . . . . 5
2. Идеальный Лисп . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3. Запись программ . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4. Определение языка . . . . . . . . . . . . . . . . . . . . . . . . . 32
5. Интерпретатор. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6. Отображения и функционалы . . . . . . . . . . . . . . . . 51
7. Имена и контексты . . . . . . . . . . . . . . . . . . . . . . . . 64
8.
Управление процессами . . . . . . . . . . . . . . . . . . . . . 76
9. Традиционное программирование . . . . . . . . . . . . 80
10. Парадигмы программирования . . . . . . . . . . . . . . 89
История и выводы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Термины . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Учебное пособие разработано при поддержке Российского фонда переподготовки кадров и сдано в
печать в 2004 году. Курс разработан на базе Высшего колледжа информатики Новосибирского госуниверситета. Содержание курса соответствует PF4, PL7, PL5 классификатора CC2001CS.
2
Предисловие
Целью курса является изучение идей языка Лисп и методов функционального
программирования. В курсе будут рассмотрены:
- История языка Лиспа.
- Идеи символьной обработки информации.
- Принципы функционального программирования.
- Методы программирования на Лиспе. Автор языка Лисп – профессор математики и философии Джон Мак-Карти,
выдающийся ученый в области искусственного интеллекта. Он предложил
проект языка Лисп, идеи которого возбудили не утихающие до наших дней
дискуссии о сущности программирования. Сформулированная Джоном Мак-
Каpти (1958) концепция символьной обработки информации восходит к идеям
Чёрча (лямбда-исчисление) и других видных математиков конца 20-ых годов
предыдущего века. Джон Мак-Карти предложил функции рассматривать как
общее понятие, к которому могут быть сведены все другие понятия
программирования. Особый интерес представляют рекурсивные функции и методы их реализации в
системах программирования. Понятие функции отчасти содержит концепцию
времени: сначала вычисляются аргументы в порядке перечисления, затем в
соответствии с заданным алгоритмом строится значение функции - ее результат. Лаконизм рекурсии может скрывать нелегкий путь к элегантному решению
задачи.