ЛОГІЧНЕ І ФУНКЦІОНАЛЬНЕ ПРОГРАМУВАННЯ

 

Лектор:

Єпік Марина Олександрівна

к.т.н., доцент кафедри комп’ютерних технологій

marinayepik@gmail.com

Донецький національній університет

 

КІЛЬКІСТЬ ECTS КРЕДИТІВ: 4

КІЛЬКІСТЬ ЛЕКЦІЙ: 28 годин

КІЛЬКІСТЬ ЛАБОРАТОРНИХ РОБІТ: 14 годин

ДАТА ПРОВЕДЕННЯ КУРСУ:

8 семестр

  

   Про курс

 

Логічне програмування Логіка предикатів. Логічний вивід. Прямий вивід. Метод резолюцій. Фрази Хорна. Метод резолюцій у логіці предикатів. Принцип логічного програмування. Мова логічного програмування Prolog.

Структура програми на Prolog. Змінні. Об’єкти і відношення. Домени і предикати. Складені цілі. Анонімні змінні. Знаходження рішень для складених цілей, повернення. Використання заперечення. Коментарі.

Вільні і пов’язані змінні. Типи доменів. Використання складених об’єктів. Декларація доменів для складених об’єктів. Спуск по рівнях.

Рекурсія в Prolog. Хвостова рекурсія. Рекурсія і відсікання.

Списки у Prolog. Обробка списків. Об’єднання списків. Запис елементів списку в зворотному порядку. Перевірка списку: чи є він паліндромом. Отримання елемента списку по його номеру. Видалення усіх входжень заданого значення зі списку. Приклад обчислювання суми елементів списку. Приклад обчислювання середнього арифметичного елементів списку. Приклад знаходження мінімального елемента списку. Сортування списків. Бульбашкове сортування. Сортування вставкою. Сортування вибором. Швидке сортування. Сортування злиттям.

Множини у Prolog. Предикат, який перетворює довільний список у множину. Реалізація теоретико-множинних  операцій. Операція об’єднання двох множин. Операція перетину двох множин. Операція різниці двох множин. Предикат, який дозволяє перевіряти: чи є одна множина підмножиною іншої. Операція симетрична різниці. Операція доповнення.

Файли у  Prolog. Предикат відкриття файлу для читання. Стандартні предикати для роботи з файлами. Предикат, який виводе зміст довільного файлу на екран. Предикат, який формує файл з символів, які вводяться із клавіатури. Предикат, який виводе зміст файлу на екран і принтер. Предикат, який переписує компоненти одного файлу в інший.

 Функціональне програмування  Загальне уявлення про функціональне програмування та його застосуванні. Математичні основи функціонального програмування. Lisp і принципи технічної підтримки.

Основи Lisp. Основи символьної обробки. Базові засоби. Дані і основні функції Lisp: CONS, CAR, CDR, ATOM, EQ. Точкова нотація.

Функції і вирази. Основні поняття: лямбда-вираз і лямбда-виклик. Визначення функції. Функції привласнення значень символу: SET, SETQ, SETF. Функція, яка запобігає  обчисленню значень виразу: QUOTE. Галуження  (умовний вираз): COND.

Рекурсивні функції. Універсальна функція. Основні методи обробки списків. Визначення універсальної функції (інтерпретатора).

Відображення структур даних і функціонали. Визначення функціонала. Вбудовані функціонали. Замикання функціонального аргументу. Застосування функціоналів.

Категорії функцій. Керуючі структури Lisp є формами. Prog-вирази і цикли. Створення локального зв’язку: LET.  Циклічні обчислювання: пропозиція DO.  Повторення через ітерацію або рекурсію. Форми динамічного припинення обчислень: CATCH і THROW.

Списки властивостей атомів і структура списків. Представлення структури списку. Деструктивні (руйнівні) перетворення структури списків. Список вільної пам’яті і збирач сміття.

Компіляція функціональних програм. Компілятор і вимоги до коду програми. Вимоги до компіляції Lisp-програм. Компіляція. Віденський метод. Операційна семантика. Визначення Lisp-компілятора на мові Lisp.