Функциональное и логическое программирование
Функциональное программирование. Понятие функции. Использование функций для программирования. Отличие функционального программирования от процедурного. Списки. S-выражения. Точечная запись. Функции для обработки S-выражений. Определение рекурсивных функций. Накопительные параметры. Локальные определения. Функции высших порядков. Лямбда-выражения. Представление и выполнение функциональных программ. Виды вычислений. Карринг. Запоминание. Монады. Интерпретация и компиляция функциональных программ. Определение типа функции высшего порядка. Чистое /\-исчисление. Комбинаторная логика. Логическое программирование Логическое программирование и язык Пролог. Синтаксис Пролог-программы. Правила, структуры, атомы, операторы и списки. Арифметика в языке Пролог. Сопоставление и рекурсия - основные приемы программирования в Прологе. Работа со списками в Прологе (append, delete, member). Семантика программирования на Прологе. Отсечение и отрицание. Встроенные предикаты классификации термов. Встроенные предикаты для работы с утверждениями, структурами, ввода и вывода. Встроенные предикаты порождения решений. Отладка Пролог-программ. События CALL, EXIT, REDO и FAIL. Примеры решения задач средствами логического программирования. Логика предикатов. Логика предикатов первого порядка. Метод резолюции. Факторизация. Хорновские предложения и язык Пролог. Логическая программа. Спецификация. Вычисляемое отношение. Частичная правильность и полнота логической программы (достаточные условия). Разрешимость программы. Правильность логических алгоритмов (достаточные условия). Верификация программ. Синтез программ. Представление знаний. Искусственный интеллект. Способы представления знаний. Нечеткая логика. Принципы построения экспертных систем. Системы автоматического доказательства теорем. Эвристические алгоритмы.