Правительство Российской Федерации Федеральное государственное автономное образовательное учреждение высшего профессионального образования "Национальный исследовательский университет "Высшая школа экономики" Факультет бизнес-информатики Программа дисциплины Функциональное и логическое программирование для направления 231000.62 Программная инженерия подготовки бакалавра Автор программы: Кузнецов Денис Борисович, [email protected] Одобрена на заседании кафедры информационных технологий в бизнесе «___»_______ 20 г Зав. кафедрой О.Л. Викентьева _______________________ Утверждена Учебно-методическим Советом НИУ ВШЭ - Пермь «___»_____________201 г. Председатель Г.Е. Володина ________________________ Пермь, 2013 Настоящая программа не может быть использована другими подразделениями университета и другими вузами без разрешения кафедры-разработчика программы. 2 Цель и задачи дисциплины 1.1. Цель изучение дисциплины Функциональный, как и логический, стиль программирования является альтернативным по отношению к традиционному, процедурному, программированию способом решения задач. Его отличительными чертами являются “математичность” и “человечность”. В функциональном программировании единственным действием является вызов функции, т. е. никаких ячеек памяти, операторов присваивания, циклов, блок-схем и передачи управления. Логическое программирование это переход на еще более высокий уровень порграммирования. Применение его позволят кроме всего прочего автоматически строить доказательства теорем и, вследствии этого, решать задачи искусственного интеллекта. 1.2. Задачи изучения дисциплины Задачами изучения данной дисциплины являются: освоение функционального стиля программирования; освоение принципов логического программирования ; изучение декларативных способов программирования. Предметом изучения данной дисциплины являются следующие объекты: функциональные языки программирования; логические языки программирования; математически основы функциональных и логических языков. 1.3. Место дисциплины в профессиональной подготовке выпускников Дисциплина относится к федеральному компоненту цикла специальных дисциплин. Является продолжением ранее изученных дисциплин: Дискретная Математика, Математическая логика и теория алгоритмов, Теория языков программирования и методы трансляции, служит основой для изучения дисциплин, базирующимися на знаниях и умениях, полученных при изучении данной дисциплины: Теория вычислительных процессов, Технология разработки программного обеспечения. Квалификационные требования к уровню освоения содержания дисциплины В результате изучения дисциплины студент должен: иметь представление: о программном обеспечении, выполняющем трансляцию языков логического и функционального программирования; о практическом применении функциональных и логических языков; об особенностях логического и функционального программирования; знать: синтаксис языка Лисп; реализацию резолюций в языке Пролог; применимость языка Хаскел для комбинаторной логики; уметь выполнять: преобрзование цикла в рекурсию; составлять рекурсивные функции; альфа-конверсию и бета-редукцию; владеть: методами и приёмами обрабоки списков; лямбда-исчислением; комбинаторной логикой; методом резолюций; иметь навыки: 3 формирования логических конструкций; составления S-выражений; посроения предикатов. 4 3. Содержание дисциплины 3.1. Содержание разделов учебной дисциплины Введение. Лк - 2 час. Императивное и деклараивное программирование. Проблемы «традиционного» программирования. Раздел 1. Традиционное программирование. Лк - 8 час., ЛР - 9 час., СРС – 19 час. Тема 1. Виды программирования Понятие процедурного, функционального и логического программирования, их сравнительный анализ. Традиционное программирование и логика Хоара. Обзор метода Дейкстры. Соответствие между функциональными и императивными программами Раздел 2. Функциональное программирование. Лк - 7 час., ЛР - 8 час., СРС 17 час. Тема 2. Математические основы функционального программирования Рекурсивные и примитивно-рекурсивные функции. Рекурсивное программирование. Рекурсивные функции и лямбда-исчисление А.Черча. Программирование в функциональных обозначениях. S-выражения. Анализ структуры термов. Комбинаторная логика. Нормальные алгорифмы Маркова. Тема 3. Функциональные языки Строго функциональный язык. программ. Раздел 3. Представление и интерпретация функциональных программ. Отладка Конкретные реализации языков функционального программирования. Лк - 8 час., ЛР - 5 час., СРС - 12 час. Тема 4. Лисп Приемы программирования и организации рекурсии на языке ЛИСП. Реализация S-выражений и лямбдаисчисления в языке Лисп. Тема 5. Хаскел Особенности синтаксиса языка Хаскел. Реализация комбинаторов в языке Хаскел. Раздел 4. Логическое программирование. Лк - 8 час., ЛР - 9 час., СРС - 24 час. Тема 6. Математические основы логического программирования Логика предикатов. Металогические предикаты. Внелогические предикаты. Метод резолюций. SDLрезолюция. Вычислительная модель. Недетерминированное программирование. Неполные структуры данных. Тема 7. Реализация логического программирования Логическая программа: основные конструкции, операционная и декларативная семантика, интерпретация, корректность. Хорновская логическая программа. Синтаксис Пролога. Программирование баз данных. Методы поиска. Обработка нечетких данных. Constraint–Пролог: операционная семантика. Программирование второго порядка. Заключение. Лк - 1 час. Применения функционального программирования. Применение логического программирования в задачах искусственного интеллекта. 5 3.2. Перечень тем лабораторных работ № п.п. Номер темы дисциплины 1. 1 Сравнение циклов и рекурсии 2. 2 S-выражения 3. 3 λ-выражения и бета-редукция в λ-исчислении в языке lisp 4. 4 Рекурсивные функции в Lisp 5. 4 Функции высших порядков 6. 5 Комбинаторное программирование в Haskell 7. 6 Запись дизъюнктов в Prolog 8. 7 Обработка списковых структур в Prolog Наименование темы лабораторной работы 3.3. Самостоятельная работа студентов 3.3.1. Подготовка к аудиторным занятиям — 7 час. 3.3.2. Индивидуальные задания — 48 час. № п.п. Номер раздела Номер темы 1. 1 1 2. 2 2 Перевод основных комбинаторов в лябда-выражения. 6 3. 2 3 Анализ современных функциональных языков. 9 4. 3 4 Исследование реализаций интерпретатора Lisp. 8 5. 3 5 Исследование реализаций интерпретатора Haskel. 8 6. 4 6 Построение доказательств методом резолюций. 6 7. 4 7 Реализация п. 6 на Prolog 7 Наименование задания Составление таблицы соответствия процедурного и функционального программирования. Форма контроля — защита отчетов по индивидуальным заданиям. Количество часов 7 6 4. Учебно-методическое обеспечение дисциплины 4.1. Основная литература № п.п. Автор(ы) 1. Н. А. Роганова 2. С.Чери, Г.Готлоб, Л.Танка Заглавие Функциональное программирование : учебное пособие для вузов Логическое программирование и базы данных Издательство, год издания Назначение, вид издания, гриф М. : Изд-во МГИУ, 2007 учебное пособие для вузов М.: Мир, 1992 Учебник Кол-во экземпл. в библ. 4.2. Дополнительная литература Издательство, год издания Вид издания, гриф № п.п. Автор(ы) Заглавие 1. М. В. Захарьящев, Ю. И. Янов Математическая логика в программировании М.: Мир, 1991 Сб. статей 2. П. Хендерсон Функциональное программирование М.: Мир, 1983 Учебник Кол-во экземпл. в библ. 7