- •Функциональное и логическое программирование
- •Глава 1. Классификация языков и стилей программирования 3
- •Глава 2. Программирование на языКе лисп 16
- •Глава 3. Программирование на языке пролог 89
- •Глава 1. Классификация языков и стилей программирования
- •Основные парадигмы программирования
- •Процедурное (императивное, директивное) программирование.
- •Объектно-ориентированное программирование.
- •Декларативное программирование
- •Логическое программирование.
- •Функциональное программирование.
- •Классификация языков программирования
- •Функциональные языки
- •Логические языки
- •Глава 2. Программирование на языКе лисп
- •История создания языка Лисп
- •Диалекты языка Лисп
- •Лисп-машины
- •Область применения языка Лисп
- •Особенности языка Лисп Одинаковая форма данных и программ
- •Хранение данных, не зависящее от места
- •Автоматическое и динамическое управление памятью
- •Функциональная направленность
- •Динамическая проверка типов
- •Интерпретирующий и компилирующий режимы работы;
- •Пошаговое программирование
- •Единый системный и прикладной язык программирования
- •Основы языка Лисп
- •Понятие функции.
- •Quote блокирует вычисления
- •Базовые функции языка.
- •Функция car возвращает в качестве значения первый элемент списка.
- •Функция cdr - возвращает в качестве значения хвостовую часть списка, т. Е. Список, получаемый из исходного списка после удаления из него головного элемента:
- •Функция cons включает новый элемент в начало списка:
- •Предикат equal проверяет идентичность записей:
- •Предикат equalp проверяет наиболее общее логическое равенство:
- •Другие простейшие встроенные функции Лиспа. Функция null проверяет, является ли аргумент пустым списком:
- •Комбинации вызовов car и cdr позволяют получить любой элемент списка:
- •Наиболее общая функция, выделяющая n-й элемент списка (при этом индексация начинается с 0):
- •Функция last позволяет выделить последний элемент списка:
- •Функция list - создает список из элементов:
- •Функция setq – невычисляющее присваивание:
- •Функция setf - обобщенная функция присваивания:
- •Функции, обладающие побочным эффектом, называются псевдофункциями.
- •С символом можно связать именованные свойства:
- •Функция get - возвращает значение свойства, связанного с символом:
- •Псевдофункция remprop удаляет свойство и его значение:
- •Вызов интерпретатора eval вычисляет значение выражения.
- •Ввод и вывод.
- •Использование файлов.
- •Определение функций
- •Задание параметров в лямбда-списке.
- •Передача параметров и область их действия.
- •Вычисления в лисПе.
- •Предложение let создает локальную связь внутри формы:
- •Последовательные вычисления.
- •Разветвление вычислений.
- •Циклические вычисления.
- •Передача управления.
- •Другие циклические структуры.
- •Динамическое управление из другого контекста
- •Внутреннее представление списков
- •Функциональное программирование Рекурсия. Различные виды рекурсии.
- •Функции более высокого порядка.
- •Применяющие функционалы.
- •Отображающие функционалы.
- •Макросы
- •Типы данных
- •Основные типы данных:
- •Глава 3. Программирование на языке пролог
- •Общие сведения о языке Пролог. Язык Пролог как система, реализующая логический вывод в исчислении предикатов первого порядка.
- •Фразы Хорна как средство представления знаний.
- •Синтаксис языка Пролог.
- •Фразы, термы, факты, правила.
- •Константы:
- •Простейшая программа на Прологе
- •Выполнение запроса в Прологе.
- •Неудача запроса и возврат назад.
- •Декларативная и процедурная семантика Пролога.
- •Рекурсивные процедуры.
- •Списки.
- •Операторы.
- •Средства управления ходом выполнения программы. Предикат сократить (отсечение).
- •Отрицание как неудача запроса.
- •Встроенные предикаты.
- •Типы отношений.
- •Ограничения, обеспечивающие целостность отношений.
- •Свойства отношений.
- •Подходы к программированию на языке Пролог.
М. И. Никитина
Функциональное и логическое программирование
Красноярск
2014
Глава 1. Классификация языков и стилей программирования 3
1.1. Основные парадигмы программирования 3
Процедурное (императивное, директивное) программирование. 3
Объектно-ориентированное программирование. 5
Декларативное программирование 6
Логическое программирование. 9
Функциональное программирование. 11
1.2. Классификация языков программирования 12
Функциональные языки 13
Логические языки 15
Глава 2. Программирование на языКе лисп 16
2.1. История создания языка Лисп 16
2.2. Диалекты языка Лисп 17
MACLISP 17
MYLISP 18
INTERLISP 18
FRANZLISP 20
ZETALISP 20
COMMON LISP 21
Лисп-машины 23
2.3. Область применения языка Лисп 24
2.4. Особенности языка Лисп 25
Одинаковая форма данных и программ 25
Хранение данных, не зависящее от места 25
Автоматическое и динамическое управление памятью 26
Функциональная направленность 26
Динамическая проверка типов 26
Интерпретирующий и компилирующий режимы работы; 27
Пошаговое программирование 27
Единый системный и прикладной язык программирования 28
2.5. Основы языка Лисп 29
S-выражения 29
Понятие функции. 31
Базовые функции языка. 32
Другие простейшие встроенные функции Лиспа. 35
Имя и значение символа 37
Ввод и вывод. 40
Использование файлов. 43
Определение функций 44
Задание параметров в лямбда-списке. 46
Передача параметров и область их действия. 47
Вычисления в ЛИСПе. 49
Внутреннее представление списков 59
2.6. Функциональное программирование 66
Рекурсия. Различные виды рекурсии. 66
Функции более высокого порядка. 74
Применяющие функционалы. 75
Отображающие функционалы. 76
Макросы 78
2.7. Типы данных 80
Основные типы данных: 82
Глава 3. Программирование на языке пролог 89
3.1. Общие сведения о языке Пролог. 89
Язык Пролог как система, реализующая логический вывод в исчислении предикатов первого порядка. 89
Фразы Хорна как средство представления знаний. 91
3.2. Синтаксис языка Пролог. 92
Фразы, термы, факты, правила. 93
Простейшая программа на Прологе 95
Выполнение запроса в Прологе. 98
Неудача запроса и возврат назад. 101
3.3. Декларативная и процедурная семантика Пролога. 102
Рекурсивные процедуры. 103
3.4. Списки. 104
Операторы. 106
3.5. Средства управления ходом выполнения программы. 108
Предикат сократить (отсечение). 108
Результат запроса ?- a (N). 109
Отрицание как неудача запроса. 111
3.6. Встроенные предикаты. 112
3.7. Типы отношений. 113
Ограничения, обеспечивающие целостность отношений. 114
Свойства отношений. 114
3.8. Подходы к программированию на языке Пролог. 116
Глава 1. Классификация языков и стилей программирования
Основные парадигмы программирования
В настоящее время сложилось несколько парадигм, которые диктуют как подходы к разработке программ на современных языках программирования, так и методы изучения информатики. Это процедурная, объектно-ориентированная и декларативная, включающая функциональную и логическую парадигмы. Разработаны методы интерпретации языков всех парадигм друг в друга. Рядом авторов был сделан вывод о приоритете алгоритмической парадигмы, поскольку именно она, поддержана на аппаратном уровне, является основой наиболее распространенного типа компьютеров – машин Фон Неймана. Однако, благодаря совершенствованию информационно-вычислительных технологий, разработаны и реализованы различные типы машин, соответствующие любому из методов программирования.
Понятие алгоритма становится не единственным понятием, лежащим в основе программирования. Наряду с ним появляются такие понятия как «унификация», «управление» характерные для логической парадигмы, «объект», «действие над объектом» для объектно-ориентированной парадигмы и «функция», «декомпозиция функции» для функциональной парадигмы.
