Программа дисциплины Функциональное программирование и интеллектуальные системы для направления 080700. 62 Бизнес-информатика Утвержден
Вид материала | Программа дисциплины |
- Программа дисциплины «Введение в программирование» для направления 080700 «Бизнес-информатика», 101.22kb.
- Программа дисциплины "Программирование" для направления, 488.76kb.
- Программа дисциплины Макроэкономика для направления 080700. 62 «Бизнес-информатика», 565.79kb.
- Программа дисциплины для направления 080700. 68 Бизнес-информатика подготовки бакалавра, 83kb.
- Программа дисциплины Риторика и ораторское искусство для направления 080700. 62 «Бизнес-информатика», 144.38kb.
- Программа дисциплины Правовая защита интеллектуальной собственности для направления, 194.74kb.
- Программа дисциплины Информатика и программирование для направления 080700 «Бизнес-информатика», 272.37kb.
- Программа дисциплины Моделирование информационных систем для направления 080700., 244.82kb.
- Программа дисциплины Культурология для направления 080700. 62 «Бизнес-информатика», 202.98kb.
- Программа дисциплины программирование на языке С++ для направления 080700. 62 «Бизнес-информатика», 131.2kb.
Программа дисциплины
Функциональное программирование и интеллектуальные системы
для направления 080700.62 – Бизнес-информатика
Утвержден Учебно-методическим Советом ПФ ГУ-ВШЭ Председатель_______________ Г.Е.Володина «_______»_________________________2010 г. | Одобрен на заседании кафедры Информационных технологий в бизнесе Зав. кафедрой_______________ Т.А. Казаченко «______»__________________________2010 г. |
Пермь 2010
- Пояснительная записка
- Авторы программы: Л.А. Залогова, к.ф.-м.н., доцент; Л.Н. Лядова, к.ф.-м.н., доцент
- Требования к студентам:
При изучении данного курса используются знания и навыки, полученные при изучении курсов «Информатика и программирование», «Дискретная математика», «Объектно-ориентированный анализ и программирование» «Программирование на C++» и «Основы программирования в VS.NET», «Основы систем искусственного интеллекта».
Полученные знания и навыки используются при выполнении курсовых и выпускных квалификационных работ.
- Аннотация:
Дисциплина является факультативной, предназначена для студентов третьего курса направления 080700.62 – «Бизнес-информатика».
Курс призван повысить общую эрудицию студентов, показать место и значение методов и средств функционального и логического программирования в различных областях, в частности, при создании систем искусственного интеллекта.
Цель курса состоит в изучении теоретических основ и получении практических навыков разработки программных систем с использованием функционального подхода к программированию.
Задачи курса:
- Рассмотреть особенности различных парадигм программирования, сравнить возможности процедурного, объектно-ориентированного, логического и функционального программирования для решения различных классов задач.
- Рассмотреть принципы логического и функционального программирования и их реализацию в различных языках.
- Освоить приёмы функционального программирования и дать навыки разработки приложений на языке F# (в VS.NET).
Изучение теоретического материала поддерживается практическими занятиями. Часть вопросов, хорошо обеспеченных литературой и не представляющих сложности для изучения ввиду того, что их содержание основано на теоретическом материале и практическом опыте, полученном при изучения других дисциплин, вынесена на самостоятельное изучение.
Содержание программы дисциплины должно обеспечить базовую подготовку студентов в процессе формирования устойчивых знаний и практических навыков использования современных инструментальных средств разработки приложений.
Навыки работы закрепляются при выполнении домашнего задания.
Теоретические знания проверяются при выполнении контрольной работы.
Полученные знания и навыки могут быть использованы при выполнении выпускных квалификационных работ.
- Учебная задача курса:
В результате изучения курса студент должен:
- Знать:
- основные термины, понятия, изучаемые в рамках данной дисциплины;
- принципиальные отличия различных парадигм программирования;
- основные принципы логического программирования и базовые конструкции языков логического программирования (на примере Prolog);
- основные принципы функционального программирования и базовые конструкции языков функционального программирования (Lisp, Haskell, F#);
- основные методы и приемы создания интеллектуальных систем на основе средств функционального программирования.
- Уметь:
- разрабатывать программы средней сложности с использованием средств функционального программирования F# в VS.NET;
- применять возможности функционального программирования для создания интеллектуальных систем.
- Иметь представление:
- о различных способах мышления в программировании и парадигмах программирования;
- о языках логического и функционального программирования, их особенностях;
- о современных системах программирования и обеспечиваемых ими возможностях при создании приложений различного назначения;
- о различных подходах к разработке систем интеллектуальных систем.
- Обладать навыками:
- проектирования интеллектуальных систем;
- разработки приложений средней сложности на языке F# в среде VS.NET.
В ходе изучения курса студенты должны научиться свободно оперировать основными понятиями изучаемой дисциплины, получить знания и навыки, необходимые для самостоятельного освоения современных средств программирования, создания интеллектуальных систем с их помощью.
- Формы контроля:
- Текущий контроль:
- согласно графику контрольных мероприятий выполняются контрольная работа и домашнее задание;
- на практических занятиях выполняются лабораторные работы, результаты выполнения которых учитываются при определении оценки за семинарские занятия.
- Итоговый контроль: зачет проводится в соответствии с учебным планом и графиком учебного процесса.
- Итоговая оценка: складывается в соответствии с «Положением о рейтинге», принятом в ПФ ГУ ВШЭ.
Формы проведения определяются учебным планом. Сроки проведения определяются графиком учебного процесса.
- Содержание программы
- Парадигмы программирования. Характеристика и место
функционального подхода
- Введение
- Введение
Поколения языков программирования. Императивный, объектно-ориентированный, логический и функциональный подходы к программированию – достоинства, недостатки и основные характеристики.
- Общие сведения о функциональном подходе к программированию
Понятие функции и функциональной программы. История развития языков функционального программирования. Программирование при помощи функций. Программирование при помощи процедур.
- Основы функционального программирования
- Строго функциональный язык
Символьные данные и S-выражения. Типизация в функциональных языках. Строгая типизация. Списки и деревья. Элементарные селекторы и конструкторы с примерами применения. Элементарные предикаты и арифметика с примерами применения. Рекурсивные функции. Примеры применения рекурсивных функций на различных задачах обработки списков. Проблема выбора подфункций. Проблема модульности функциональной программы. Возможность накапливающих параметров на примере инверсии списка. Локальные определения в функциональных программах. Лямбда-исчисление А. Черча – теоретические сведения и машинная реализация. Точечная запись выражений.
- Основы функционального программирования на языке Haskell
Синтаксис и особенности языка функционального программирования Haskell 98. Стандартные классы Haskell и типы данных. Конструкторы типов и конструкторы данных. Полиморфные типы и полиморфные функции с примерами применения. Типы, определяемые пользователем. Понятие и принцип действия механизма pattern-matching (соответствия образцу). Функции как объекты первого класса (first-class objects). Сигнатура типа функции. Понятие карривых и некарривых функций. Инфиксные операторы. Синонимы типов как средство повышения читабельности функциональных программ. Генераторы. Лямбда-абстракции в Haskell. Функции высших порядков в Haskell. Отложенные вычисления.
Механизмы организации массивов в Haskell и простейшие примеры их обработки. Примеры организации более сложных программ.
Представление и интерпретация функциональных программ. Абстрактная и конкретная формы программ. Проблема связывания значений и переменных. Техника интерпретации функциональных программ.
Соответствие между функциональными и императивными программами. Особенности интерпретирования императивных программ. Функциональные эквиваленты мперативных программ. Преобразование императивных программ в функциональные. Аппаратное обеспечение функциональных программ.
Функциональный подход к параллелизму. Задержка вычислений. Замедленные вычисления. Сети связанных процессов.
Функции высших порядков. Типы функций и понятие высшего порядка функции. Композиция функций. Примеры применения функций высшего порядка.
- Основы функционального программирования в среде VS.NET: программирование на языке F#
Платформа .NET Framework и F#.
Знакомство с базовым синтаксисом. Элементы базового синтаксиса, необходимые для понимания текста примера. Использование так называемого «легкого синтаксиса».
Функциональная концепция F#.
Поддержка в F# императивной и объектно-ориентированной разработки.
Асинхронные методы в F#.
Сравнение F# и C# на примере вычисления детерминанта матрицы произвольного размера и пр.
Сравнение C# и F# при решении задач, связанных с обработкой строк.
- Учебно-методическое обеспечение дисциплины
- Литература:
Базовый учебникк:
Городня Л.В. Основы функционального программирования [Электронный ресурс]
[t.ru/department/pl/funcpl/soft.php].
Основная:
- Городня Л.В. Парадигмы программирования [Электронный ресурс]
[t.ru/department/se/paradigms/15/].
- Зыков С.В. Введение в теорию программирования. Функциональный подход [Электронный ресурс] [t.ru/department/se/tppfunc/].
- Хендерсон П. Функциональное программирование. Применение и реализация: Пер. с англ. М.: Мир, 1983. – 349 с, ил.
- Харрисон Дж. Введение в функциональное программирование: [Электронный документ] [m.ac.uk/Teaching/Lectures/funprog-jrh-1996/].
- Харрисон П., Филд А. Функциональное программирование:
[Электронный документ]
- Сошников Д.В. Функциональное программирование [Электронный ресурс]
[t.ru/department/pl/funcprog/].
Дополнительная:
- Непейвода Н.Н. Стили и методы программирования [Электронный ресурс][ t.ru/department/se/progstyles/].
- Городняя Л.В., Березин Н.А. Введение в программирование на Лиспе
[Электронный ресурс] [t.ru/department/pl/lisp/].
- Симон П.Д. Язык и библиотеки Haskell 98
[Электронный ресурс] [t.ru/department/pl/haskel98/lit.php].
- Борисенко В.В. Основы программирования. – М.: Интернет-Университет Информационных технологий, 2005.
- Хювенен Э., Сеппянен Й. Мир Лиспа. В 2-х томах. М., Мир, 1990.
- Братко И. Алгоритмы искусственного интеллекта на языке Пролог.– М.: Вильямс, 2004.
- Стерлинг Л., Шапиро Э. Искусство программирования на языке ПРОЛОГ. М., Мир, 1990.
- Тематика заданий по различным формам текущего контроля:
Тематика контрольной работы:
Теоретические основы функционального программирования.
Тематика домашних заданий:
Разработка интеллектуального приложения на языке F# в среде .Net Framework.
Темы (предметные области) для выполнения домашних заданий – разработки интеллектуального приложения на F# – выбирает студент по согласованию с преподавателем.
Перечень вопросов для самоконтроля студентов:
- Охарактеризуйте поколения языков программирования.
- Дайте понятия императивного, объектно-ориентированного, логического и функционального подходов к программированию, опишите их достоинства, недостатки и основные характеристики.
- Дайте понятие функции и функциональной программы.
- Опишите историю развития языков функционального программирования. Приведите примеры.
- Программирование при помощи функций. Программирование при помощи процедур. Сравните подходы.
- Дайте понятие строго функционального языка.
- Типизация в функциональных языках. Строгая типизация. Примеры: списки и деревья.
- Дайте понятие элементарных селекторов и конструкторов с примерами применения.
- Элементарные предикаты и арифметика. Приведите примеры применения.
- Рекурсивные функции. Приведите примеры применения рекурсивных функций на различных задачах обработки списков.
- Проблема выбора подфункций. Примеры.
- Проблема модульности функциональной программы. Примеры.
- Возможность накапливающих параметров на примере инверсии списка.
- Локальные определения в функциональных программах. Примеры.
- Лямбда-исчисление А. Черча: теоретические сведения и машинная реализация.
- Точечная запись выражений. Примеры.
- Охарактеризуйте возможности функционального программирования в MS VS.NET.
- Приведите примеры решения задач в F#.
- Методические рекомендации (материалы) преподавателю:
На лекциях используется «проблемный» подход к изложению материала: материал каждой лекции иллюстрируется примерами, рассматриваются нестандартные ситуации, требующие решения с использованием рассматриваемого материала. При этом студенты должны активно участвовать в обсуждении вопросов, выработке решений. Для самостоятельного изучение предлагается использовать электронные ресурсы, в частности, курсы по информационным технологиям INTUIT, а также материалы, размещаемые на сайтах профессиональных сообществ.
При разборе примеров следует обращать особое внимание на типичные проблемы, связанные с созданием интеллектуальных приложений.
На практических занятиях используются следующие методы обучения и контроля усвоения материала:
- выполнение лабораторных работ по теме занятия сопровождается контрольным опросом;
- обсуждение различных вариантов решения, предложенных студентами, сравнение решений, анализ возможных ситуаций.
При выполнении лабораторных заданий использовать методические рекомендации и руководства, приведенные в рекомендованных источниках.
- Методические указания студентам:
Студенту рекомендуется следующая схема подготовки к практическому занятию:
- проработать конспект лекций;
- проанализировать основную и дополнительную литературу, рекомендованную по изучаемому разделу;
- проанализировать варианты решений, предложенные преподавателем;
- при затруднениях сформулировать вопросы к преподавателю.
При выполнении заданий использовать методические рекомендации и руководства, приведенные в рекомендованных источниках (в списке литературы по курсу).
- Рекомендации по использованию информационных технологий
Все практические занятия проводятся в компьютерном классе. Программное обеспечение сети должно поддерживать
- возможность доступа к материалам для подготовки, размещаемым на сервере, в форматах MS Word, MS Power Point;
- возможность использовать средств разработки приложений на языке F# в среде MS VS.NET, справочные системы.
Авторы программы: __________________________________________ / Л.А. Залогова /
__________________________________________ / Л.Н. Лядова /
IV. Тематический расчет часов
№ | Наименование разделов и тем (с разбивкой по модулям) | Аудиторные часы | Самостоятельная работа | Всего часов | ||
Лекции | Практические занятия | Всего | ||||
Раздел 1. Парадигмы программирования. Характеристика и место функционального подхода | ||||||
1. | Введение | 2 | 0 | 2 | 4 | 6 |
2. | Общие сведения о функциональном подходе | 4 | 4 | 8 | 8 | 16 |
Раздел 2. Основы функционального программирования | ||||||
3. | Строго функциональный язык | 6 | 6 | 12 | 4 | 16 |
4. | Основы функционального программирования на языке Haskell | 4 | 4 | 8 | 6 | 14 |
5. | Основы функционального программирования в среде VS.NET: программирование на F# | 8 | 16 | 24 | 32 | 56 |
Итого: | 24 | 30 | 54 | 54 | 108 |
Авторы программы: __________________________________________ / Л.А. Залогова /
__________________________________________ / Л.Н. Лядова /
Приложение 1
План практических занятий
Тема 1. Основы функционального программирования (10 часов)
Тема лекции:
Общие сведения о функциональном подходе (4 часа).
Вопросы по теме, рассматриваемые на практических занятиях:
Понятие функции и функциональной программы, принципы функционального программирования.
Лямбда-исчисление А. Черча – теоретические сведения и машинная реализация.
Программирование при помощи функций и при помощи процедур: примеры, сравнение.
Тема лекции:
Строго функциональный язык (6 часов).
Вопросы по теме, рассматриваемые на практических занятиях:
Символьные данные и S-выражения.
Типизация в функциональных языках. Строгая типизация.
Списки и деревья.
Элементарные селекторы и конструкторы с примерами применения.
Элементарные предикаты и арифметика с примерами применения.
Рекурсивные функции. Примеры применения рекурсивных функций на различных задачах обработки списков.
Проблема выбора подфункций. Проблема модульности функциональной программы.
Возможность накапливающих параметров на примере инверсии списка.
Локальные определения в функциональных программах.
Точечная запись выражений.
Рекомендуемая литература по теме практических занятий:
- Городня Л.В. Основы функционального программирования [Электронный ресурс]
[t.ru/department/pl/funcpl/soft.php].
- Городня Л.В. Парадигмы программирования [Электронный ресурс]
[t.ru/department/se/paradigms/15/].
- Зыков С.В. Введение в теорию программирования. Функциональный подход [Электронный ресурс] [t.ru/department/se/tppfunc/].
- Непейвода Н.Н. Стили и методы программирования [Электронный ресурс][ t.ru/department/se/progstyles/].
- Хендерсон П. Функциональное программирование. Применение и реализация: Пер. с англ. М.: Мир, 1983. – 349 с, ил.
- Харрисон Дж. Введение в функциональное программирование: [Электронный документ] [m.ac.uk/Teaching/Lectures/funprog-jrh-1996/].
- Харрисон П., Филд А. Функциональное программирование:
[Электронный документ].
Тема 2. Основы функционального программирования на языке Haskell (4 часов)
Тема лекции:
Основы функционального программирования на языке Haskell (4 часа).
Вопросы, рассматриваемые на практических занятиях:
Основы языка функционального программирования: синтаксис, типы данных, функции, операторы.
Включение списков и арифметические последовательности. Примеры.
Функции высших порядков. Примеры применения функций высшего порядка.
Рекомендуемая литература по теме:
1. Симон П.Д. Язык и библиотеки Haskell 98.
Тема 3. Основы функционального программирования в среде VS.NET: программирование на языке F# (16 часов)
Тема лекции:
Основы функционального программирования в среде VS.NET: программирование на языке F# (8 часов).
Вопросы, рассматриваемые на практических занятиях:
Разработка программ на F# – среда программирования .NET Framework.
Синтаксис языка F#. Использование так называемого «легкого синтаксиса».
Примеры.
Поддержка в F# императивной и объектно-ориентированной разработки.
Асинхронные методы в F#.
Использование F# для вычислений.
Обработка строк на F#.
Разработка интеллектуального приложения: общий подход и реализация.
Рекомендуемая литература по теме:
- Сошников Д.В. Функциональное программирование [Электронный ресурс]
[t.ru/department/pl/funcprog/].
- Братко И. Алгоритмы искусственного интеллекта на языке Пролог.– М.: Вильямс, 2004.
- Стерлинг Л., Шапиро Э. Искусство программирования на языке ПРОЛОГ. М., Мир, 1990.
Рекомендуется при выполнении практических заданий с применением рассматриваемых инструментальных средств использовать материалы, представленные в электронном виде на сайте Microsoft (библиотека учебных курсов).