Функциональное программирование и интеллектуальные

advertisement
Правительство Российской Федерации
Государственное образовательное бюджетное учреждение
высшего профессионального образования
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ВЫСШАЯ ШКОЛА ЭКОНОМИКИ
ПЕРМСКИЙ ФИЛИАЛ
Программа дисциплины
Функциональное программирование и интеллектуальные системы
для направления 080700.62 – Бизнес-информатика
Утвержден
Учебно-методическим Советом ПФ ГУ-ВШЭ
Одобрен на заседании кафедры
Информационных технологий в бизнесе
Председатель_______________ Г.Е.Володина
Зав. кафедрой_______________ Т.А. Казаченко
«_______»_________________________2010 г.
«______»__________________________2010 г.
Пермь 2010
I. Пояснительная записка
1. Авторы программы: Л.А. Залогова, к.ф.-м.н., доцент; Л.Н. Лядова, к.ф.-м.н., доцент
2. Требования к студентам:
При изучении данного курса используются знания и навыки, полученные при изучении
курсов «Информатика и программирование», «Дискретная математика», «Объектноориентированный анализ и программирование» «Программирование на C++» и «Основы
программирования в VS.NET», «Основы систем искусственного интеллекта».
Полученные знания и навыки используются при выполнении курсовых и выпускных
квалификационных работ.
3. Аннотация:
Дисциплина является факультативной, предназначена для студентов третьего курса
направления 080700.62 – «Бизнес-информатика».
Курс призван повысить общую эрудицию студентов, показать место и значение
методов и средств функционального и логического программирования в различных областях,
в частности, при создании систем искусственного интеллекта.
Цель курса состоит в изучении теоретических основ и получении практических
навыков разработки программных систем с использованием функционального подхода к
программированию.
Задачи курса:
 Рассмотреть особенности различных парадигм программирования, сравнить
возможности
процедурного,
объектно-ориентированного,
логического
и
функционального программирования для решения различных классов задач.
 Рассмотреть принципы логического и функционального программирования и их
реализацию в различных языках.
 Освоить приёмы функционального программирования и дать навыки разработки
приложений на языке F# (в VS.NET).
Изучение теоретического материала поддерживается практическими занятиями. Часть
вопросов, хорошо обеспеченных литературой и не представляющих сложности для изучения
ввиду того, что их содержание основано на теоретическом материале и практическом опыте,
полученном при изучения других дисциплин, вынесена на самостоятельное изучение.
Содержание программы дисциплины должно обеспечить базовую подготовку
студентов в процессе формирования устойчивых знаний и практических навыков
использования современных инструментальных средств разработки приложений.
Навыки работы закрепляются при выполнении домашнего задания.
Теоретические знания проверяются при выполнении контрольной работы.
Полученные знания и навыки могут быть использованы при выполнении выпускных
квалификационных работ.
4. Учебная задача курса:
В результате изучения курса студент должен:
 Знать:
 основные термины, понятия, изучаемые в рамках данной дисциплины;
 принципиальные отличия различных парадигм программирования;
 основные принципы логического программирования и базовые конструкции
языков логического программирования (на примере Prolog);
2
 основные принципы функционального программирования и базовые
конструкции языков функционального программирования (Lisp, Haskell, F#);
 основные методы и приемы создания интеллектуальных систем на основе
средств функционального программирования.
 Уметь:
 разрабатывать программы средней сложности с использованием средств
функционального программирования F# в VS.NET;
 применять возможности функционального программирования для создания
интеллектуальных систем.
 Иметь представление:
 о различных способах мышления в программировании и парадигмах
программирования;
 о языках логического и функционального программирования, их особенностях;
 о современных системах программирования и обеспечиваемых ими
возможностях при создании приложений различного назначения;
 о различных подходах к разработке систем интеллектуальных систем.
 Обладать навыками:
 проектирования интеллектуальных систем;
 разработки приложений средней сложности на языке F# в среде VS.NET.
В ходе изучения курса студенты должны научиться свободно оперировать основными
понятиями изучаемой дисциплины, получить знания и навыки, необходимые для
самостоятельного освоения современных средств
программирования, создания
интеллектуальных систем с их помощью.
5. Формы контроля:
 Текущий контроль:
 согласно графику контрольных мероприятий выполняются контрольная работа и
домашнее задание;
 на практических занятиях выполняются лабораторные работы, результаты
выполнения которых учитываются при определении оценки за семинарские
занятия.
 Итоговый контроль: зачет проводится в соответствии с учебным планом и графиком
учебного процесса.
 Итоговая оценка: складывается в соответствии с «Положением о рейтинге», принятом
в ПФ ГУ ВШЭ.
Формы проведения определяются учебным планом. Сроки проведения определяются
графиком учебного процесса.
3
II. Содержание программы
Раздел 1. Парадигмы
программирования.
функционального подхода
Характеристика
и
место
Тема 1. Введение
Поколения языков программирования. Императивный, объектно-ориентированный,
логический и функциональный подходы к программированию – достоинства, недостатки и
основные характеристики.
Тема 2. Общие сведения о функциональном подходе к программированию
Понятие функции и функциональной программы. История развития языков
функционального программирования. Программирование при помощи функций.
Программирование при помощи процедур.
Раздел 2. Основы функционального программирования
Тема 3. Строго функциональный язык
Символьные данные и S-выражения. Типизация в функциональных языках. Строгая
типизация. Списки и деревья. Элементарные селекторы и конструкторы с примерами
применения. Элементарные предикаты и арифметика с примерами применения. Рекурсивные
функции. Примеры применения рекурсивных функций на различных задачах обработки
списков. Проблема выбора подфункций. Проблема модульности функциональной
программы. Возможность накапливающих параметров на примере инверсии списка.
Локальные определения в функциональных программах. Лямбда-исчисление А. Черча –
теоретические сведения и машинная реализация. Точечная запись выражений.
Тема 4. Основы функционального программирования на языке Haskell
Синтаксис и особенности языка функционального программирования Haskell 98.
Стандартные классы Haskell и типы данных. Конструкторы типов и конструкторы данных.
Полиморфные типы и полиморфные функции с примерами применения. Типы,
определяемые пользователем. Понятие и принцип действия механизма pattern-matching
(соответствия образцу). Функции как объекты первого класса (first-class objects). Сигнатура
типа функции. Понятие карривых и некарривых функций. Инфиксные операторы. Синонимы
типов как средство повышения читабельности функциональных программ. Генераторы.
Лямбда-абстракции в Haskell. Функции высших порядков в Haskell. Отложенные
вычисления.
Механизмы организации массивов в Haskell и простейшие примеры их обработки.
Примеры организации более сложных программ.
Представление и интерпретация функциональных программ. Абстрактная и конкретная
формы программ. Проблема связывания значений и переменных. Техника интерпретации
функциональных программ.
Соответствие между функциональными и императивными программами. Особенности
интерпретирования императивных программ. Функциональные эквиваленты мперативных
программ. Преобразование императивных программ в функциональные. Аппаратное
обеспечение функциональных программ.
Функциональный подход к параллелизму. Задержка вычислений. Замедленные
вычисления. Сети связанных процессов.
Функции высших порядков. Типы функций и понятие высшего порядка функции.
Композиция функций. Примеры применения функций высшего порядка.
4
Тема 5. Основы
функционального
программирования
в
среде
VS.NET:
программирование на языке F#
Платформа .NET Framework и F#.
Знакомство с базовым синтаксисом. Элементы базового синтаксиса, необходимые для
понимания текста примера. Использование так называемого «легкого синтаксиса».
Функциональная концепция F#.
Поддержка в F# императивной и объектно-ориентированной разработки.
Асинхронные методы в F#.
Сравнение F# и C# на примере вычисления детерминанта матрицы произвольного
размера и пр.
Сравнение C# и F# при решении задач, связанных с обработкой строк.
III. Учебно-методическое обеспечение дисциплины
1. Литература:
Базовый учебникк:
Городня Л.В. Основы функционального программирования [Электронный ресурс]
[http://www.intuit.ru/department/pl/funcpl/soft.html].
Основная:
1. Городня Л.В.
Парадигмы
программирования
[Электронный ресурс]
[http://www.intuit.ru/department/se/paradigms/15/].
2. Зыков С.В. Введение в теорию программирования. Функциональный подход
[Электронный ресурс] [http://www.intuit.ru/department/se/tppfunc/].
3. Хендерсон П. Функциональное программирование. Применение и реализация: Пер. с
англ. М.: Мир, 1983. – 349 с, ил.
4. Харрисон Дж.
Введение
в
функциональное
программирование:
[Электронный документ]
[http://www.cl.cam.ac.uk/Teaching/Lectures/funprog-jrh1996/].
5. Харрисон
П.,
Филд А.
Функциональное
программирование:
[Электронный документ]
6. Сошников Д.В. Функциональное программирование [Электронный ресурс]
[http://www.intuit.ru/department/pl/funcprog/].
Дополнительная:
1. Непейвода Н.Н. Стили и методы программирования [Электронный ресурс][
http://www.intuit.ru/department/se/progstyles/].
2. Городняя Л.В., Березин Н.А. Введение в программирование на Лиспе
[Электронный ресурс] [http://www.intuit.ru/department/pl/lisp/].
3. Симон
П.Д.
Язык
и
библиотеки
Haskell
98
[Электронный ресурс] [http://www.intuit.ru/department/pl/haskel98/lit.html].
4. Борисенко В.В. Основы программирования. – М.: Интернет-Университет
Информационных технологий, 2005.
5. Хювенен Э., Сеппянен Й. Мир Лиспа. В 2-х томах. М., Мир, 1990.
6. Братко И. Алгоритмы искусственного интеллекта на языке Пролог.– М.: Вильямс,
2004.
7. Стерлинг Л., Шапиро Э. Искусство программирования на языке ПРОЛОГ. М., Мир,
1990.
2. Тематика заданий по различным формам текущего контроля:
Тематика контрольной работы:
Теоретические основы функционального программирования.
5
Тематика домашних заданий:
Разработка интеллектуального приложения на языке F# в среде .Net Framework.
Темы (предметные области) для выполнения домашних заданий – разработки
интеллектуального приложения на F# – выбирает студент по согласованию с
преподавателем.
Перечень вопросов для самоконтроля студентов:
1. Охарактеризуйте поколения языков программирования.
2. Дайте понятия императивного, объектно-ориентированного, логического и
функционального подходов к программированию, опишите их достоинства,
недостатки и основные характеристики.
3. Дайте понятие функции и функциональной программы.
4. Опишите историю развития языков функционального программирования.
Приведите примеры.
5. Программирование при помощи функций. Программирование при помощи
процедур. Сравните подходы.
6. Дайте понятие строго функционального языка.
7. Типизация в функциональных языках. Строгая типизация. Примеры: списки и
деревья.
8. Дайте понятие элементарных селекторов и конструкторов с примерами
применения.
9. Элементарные предикаты и арифметика. Приведите примеры применения.
10. Рекурсивные функции. Приведите примеры применения рекурсивных функций на
различных задачах обработки списков.
11. Проблема выбора подфункций. Примеры.
12. Проблема модульности функциональной программы. Примеры.
13. Возможность накапливающих параметров на примере инверсии списка.
14. Локальные определения в функциональных программах. Примеры.
15. Лямбда-исчисление А. Черча: теоретические сведения и машинная реализация.
16. Точечная запись выражений. Примеры.
17. Охарактеризуйте возможности функционального программирования в MS VS.NET.
18. Приведите примеры решения задач в F#.
3. Методические рекомендации (материалы) преподавателю:
На лекциях используется «проблемный» подход к изложению материала: материал
каждой лекции иллюстрируется примерами, рассматриваются нестандартные ситуации,
требующие решения с использованием рассматриваемого материала. При этом студенты
должны активно участвовать в обсуждении вопросов, выработке решений. Для
самостоятельного изучение предлагается использовать электронные ресурсы, в частности,
курсы по информационным технологиям INTUIT, а также материалы, размещаемые на
сайтах профессиональных сообществ.
При разборе примеров следует обращать особое внимание на типичные проблемы,
связанные с созданием интеллектуальных приложений.
На практических занятиях используются следующие методы обучения и контроля
усвоения материала:
1) выполнение лабораторных работ по теме занятия сопровождается контрольным
опросом;
2) обсуждение различных вариантов решения, предложенных студентами, сравнение
решений, анализ возможных ситуаций.
При выполнении лабораторных заданий использовать методические рекомендации и
руководства, приведенные в рекомендованных источниках.
6
4. Методические указания студентам:
Студенту рекомендуется следующая схема подготовки к практическому занятию:
1) проработать конспект лекций;
2) проанализировать основную и дополнительную литературу, рекомендованную по
изучаемому разделу;
3) проанализировать варианты решений, предложенные преподавателем;
4) при затруднениях сформулировать вопросы к преподавателю.
При выполнении заданий использовать методические рекомендации и руководства,
приведенные в рекомендованных источниках (в списке литературы по курсу).
5. Рекомендации по использованию информационных технологий
Все практические
занятия проводятся в компьютерном классе. Программное
обеспечение сети должно поддерживать
1) возможность доступа к материалам для подготовки, размещаемым на сервере, в
форматах MS Word, MS Power Point;
2) возможность использовать средств разработки приложений на языке F# в среде MS
VS.NET, справочные системы.
Авторы программы:
__________________________________________
/ Л.А. Залогова /
__________________________________________
/ Л.Н. Лядова /
7
Тематический
IV.
расчет
часов
и
тем
Раздел 1. Парадигмы
Характеристика и место функционального подхода
Введение
2
0
1.
Общие сведения о функциональном подходе 4
4
2.
Самостоятельная
работа
Наименование
разделов
(с разбивкой по модулям)
Лекции
№
Практические
занятия
Аудиторные часы
Всего
Всего
часов
программирования.
2
8
4
8
6
16
6
12
4
16
4
8
6
14
16
24
32
56
54
108
Раздел 2. Основы функционального программирования
3.
4.
5.
Строго функциональный язык
6
Основы функционального программирования
4
на языке Haskell
Основы функционального программирования
8
в среде VS.NET: программирование на F#
Итого:
Авторы программы:
24
30
54
__________________________________________
/ Л.А. Залогова /
__________________________________________
/ Л.Н. Лядова /
8
Приложение 1
План практических занятий
Тема 1. Основы функционального программирования (10 часов)
Тема лекции:
Общие сведения о функциональном подходе (4 часа).
Вопросы по теме, рассматриваемые на практических занятиях:
Понятие функции и функциональной программы, принципы функционального
программирования.
Лямбда-исчисление А. Черча – теоретические сведения и машинная реализация.
Программирование при помощи функций и при помощи процедур: примеры,
сравнение.
Тема лекции:
Строго функциональный язык (6 часов).
Вопросы по теме, рассматриваемые на практических занятиях:
Символьные данные и S-выражения.
Типизация в функциональных языках. Строгая типизация.
Списки и деревья.
Элементарные селекторы и конструкторы с примерами применения.
Элементарные предикаты и арифметика с примерами применения.
Рекурсивные функции. Примеры применения рекурсивных функций на различных
задачах обработки списков.
Проблема выбора подфункций. Проблема модульности функциональной программы.
Возможность накапливающих параметров на примере инверсии списка.
Локальные определения в функциональных программах.
Точечная запись выражений.
Рекомендуемая литература по теме практических занятий:
1. Городня Л.В. Основы функционального программирования [Электронный ресурс]
[http://www.intuit.ru/department/pl/funcpl/soft.html].
2. Городня Л.В.
Парадигмы
программирования
[Электронный ресурс]
[http://www.intuit.ru/department/se/paradigms/15/].
3. Зыков С.В. Введение в теорию программирования. Функциональный подход
[Электронный ресурс] [http://www.intuit.ru/department/se/tppfunc/].
4. Непейвода Н.Н. Стили и методы программирования [Электронный ресурс][
http://www.intuit.ru/department/se/progstyles/].
5. Хендерсон П. Функциональное программирование. Применение и реализация: Пер.
с англ. М.: Мир, 1983. – 349 с, ил.
6. Харрисон Дж.
Введение
в
функциональное
программирование:
[Электронный документ]
[http://www.cl.cam.ac.uk/Teaching/Lectures/funprog-jrh1996/].
7. Харрисон
П.,
Филд А.
Функциональное
программирование:
[Электронный документ].
9
Тема 2. Основы функционального программирования на языке Haskell (4 часов)
Тема лекции:
Основы функционального программирования на языке Haskell (4 часа).
Вопросы, рассматриваемые на практических занятиях:
Основы языка функционального программирования: синтаксис, типы данных,
функции, операторы.
Включение списков и арифметические последовательности. Примеры.
Функции высших порядков. Примеры применения функций высшего порядка.
Рекомендуемая литература по теме:
1. Симон П.Д. Язык и библиотеки Haskell 98.
Основы
функционального
программирования
программирование на языке F# (16 часов)
Тема 3.
в
среде
VS.NET:
Тема лекции:
Основы функционального программирования в среде VS.NET: программирование на
языке F# (8 часов).
Вопросы, рассматриваемые на практических занятиях:
Разработка программ на F# – среда программирования .NET Framework.
Синтаксис языка F#. Использование так называемого «легкого синтаксиса».
Примеры.
Поддержка в F# императивной и объектно-ориентированной разработки.
Асинхронные методы в F#.
Использование F# для вычислений.
Обработка строк на F#.
Разработка интеллектуального приложения: общий подход и реализация.
Рекомендуемая литература по теме:
1. Сошников Д.В. Функциональное программирование [Электронный ресурс]
[http://www.intuit.ru/department/pl/funcprog/].
2. Братко И. Алгоритмы искусственного интеллекта на языке Пролог.– М.: Вильямс,
2004.
3. Стерлинг Л., Шапиро Э. Искусство программирования на языке ПРОЛОГ. М., Мир,
1990.
Рекомендуется
при
выполнении
практических
заданий
с
применением
рассматриваемых инструментальных средств использовать материалы, представленные в
электронном виде на сайте Microsoft (библиотека учебных курсов).
10
Download