НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ФАКУЛЬТЕТ АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

«УТВЕРЖДАЮ»

Декан АВТФ
д. т.н., проф.

______________________

31 августа 2005 г.

РАБОЧАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ

«ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ»

Основная образовательная программа:

Направление 230100 – «Информатика и вычислительная техника»

(бакалавриат)

Направление 654600 – «Информатика и вычислительная техника»

(инженерная подготовка)

Специализация:

230105 – «Программное обеспечение вычислительной техники и автоматизированных систем»

Факультет:

автоматики и вычислительной техники

(очная форма обучения)

Курс:

3

Семестр:

5

Лекции:

51 час

Лабораторные занятия:

17 часов

Курсовой проект:

5 семестр

Самостоятельная работа:

72 часа

Экзамен:

5 семестр

Государственный экзамен:

8 семестр

Всего:

140 часов

Новосибирск

2005 г.

Рабочая программа составлена на основании Государственного образовательного стандарта высшего профессионального образования (ГОСВПО) по направлению 230– «Информатика и вычислительная техника».

Регистрационный номер и дата утверждения ГОСВПО по направлению 230– «Информатика и вычислительная техника»: 35 тех/бак, 13 марта 2000 г. (224 тех/дс, 27 марта 2000 г.)

Индекс дисциплины в ГОСВПО ‑ СД.00 (СД.02)

Компонент – национально-региональный (вузовский)

Цикл СД – Специальные дисциплины

Учебный план по направлению 230100 – «Информатика и вычислительная техника», специализация 230105 – «Программное обеспечение вычислительной техники и автоматизированных систем» (набор 2001 г. и последующие)

Рабочая программа обсуждена на заседании кафедры вычислительной техники 31 августа 2005 г., протокол №7.

Программу разработала

ст. преп. кафедры ВТ

Зав. кафедрой ВТ,

ответственный за основную

образовательную программу

по направлениям

230100 и д. т.н., проф.

1.  ВНЕШНИЕ ТРЕБОВАНИЯ

Квалификационные требования ГОСВПО по направлению 230100 – «Информатика и вычислительная техника»:

1.3.5. Квалификационные требования

Для компетентного и ответственного решения профессиональных задач бакалавр:

-  готов участвовать во всех фазах проектирования и разработки объектов профессиональной деятельности;

-  готов участвовать в разработке всех видов документации на программные, аппаратные и программно-аппаратные комплексы;

-  способен использовать современные методы, средства и технологии разработки объектов профессиональной деятельности;

-  готов участвовать в проведении научных исследований и выполнении технических разработок в своей профессиональной области;

-  способен изучать специальную литературу и другую научно-техническую информацию, достижения отечественной и зарубежной науки и техники в области своей профессиональной деятельности;

-  взаимодействует со специалистами смежного профиля при разработке методов, средств и технологий применения объектов профессиональной деятельности в научных исследованиях и проектно-конструкторской деятельности, в управлении технологическими, экономическими, социальными системами и в гуманитарных областях деятельности человека;

-  готов к кооперации с коллегами и работе в коллективе при разработке объектов профессиональной деятельности;

-  умеет на научной основе организовать свой труд, владеет современными информационными технологиями, применяемыми в сфере его профессиональной деятельности;

-  способен в условиях развития науки и изменяющейся социальной практики к переоценке накопленного опыта, анализу своих возможностей, умеет приобретать новые знания, используя современные информационные образовательные технологии;

-  методически и психологически готов к изменению вида и характера своей профессиональной деятельности, работе над междисциплинарными проектами.

Бакалавр должен знать:

-  методические и нормативные материалы по проектированию и разработке объектов профессиональной деятельности;

-  технологию проектирования и разработки объектов профессиональной деятельности;

-  перспективы и тенденции развития информационных технологий;

-  технические характеристики и экономические показатели лучших оте­чественных и зарубежных образцов объектов профессиональной деятельности;

-  порядок, методы и средства защиты интеллектуальной собственности;

-  методы анализа качества объектов профессиональной деятельности;

-  современные средства вычислительной техники, коммуникаций и свя­зи;

-  основные требования к организации труда при проектировании объектов профессиональной деятельности;

-  правила, методы и средства подготовки технической документации;

-  основы экономики, организации труда, организации производства и научных исследований;

-  основы трудового законодательства;

-  правила и нормы охраны труда.

НЕ нашли? Не то? Что вы ищете?

Требования ГОСВПО к обязательному минимуму содержания по направлению 654600 – «Информатика и вычислительная техника»:

Индекс

Наименование дисциплины и ее основные разделы

Часы

СД.02

Функциональное и логическое программирование:

рекурсивные функции и лямбда-исчисление А. Черча; программирование в функциональных обозначениях; функциональные языки; строго функциональный язык; приемы программирования; представление и интерпретация функциональных программ; отладка программ; конкретные реализации языков функционального программирования; соответствие между функциональными и императивными программами; применения функционального программирования;

логическая программа: основные конструкции, операционная и декларативная семантика, интерпретация, корректность; программирование баз данных; рекурсивное программирование; вычислительная модель; анализ структуры термов; металогические предикаты; внелогические предикаты; недетерминированное программирование; неполные структуры данных; программирование второго порядка; методы поиска; обработка нечетких данных; Constraint–Пролог: операционная семантика; применение логического программирования в задачах искусственного интеллекта.

140

2.  ОСОБЕННОСТИ (ПРИНЦИПЫ) ПОСТРОЕНИЯ ДИСЦИПЛИНЫ

В основу дисциплины «Функциональное и логическое программирование» положены следующие принципы:

-  дисциплина входит в число дисциплин, включенных в учебный план на основании Государственного образовательного стандарта высшего профессионального образования по направлению 230– «Информатика и вычислительная техника»;

-  основной целью дисциплины является формирование и закрепление системного подхода при разработке программ с применением языков логического и функционального программирования, в дисциплине рассматриваются средства и методы создания таких программ;

-  ядро дисциплины составляют средства и приемы создания программ с использованием языков логического и функционального программирования;

-  для успешного изучения дисциплины студенту необходимо знать основы математической логики;

-  в дисциплине выделены две родственные составляющие: логическое программирование и функциональное программирование, соответственно рассматриваются средства и методы создания программ для каждой составляющей;

-  в дисциплине закрепляются такие общепредметные умения, как выбор язык программирования для решения поставленной задачи, выбор способа представления исходных данных и выбор метода решения поставленной задачи;

-  дисциплина имеет практическую часть (лабораторные работы ‑ 17 часов и курсовое проектирование ‑ 5 семестр). Студенты применяют теоретические знания для создания программ с использованием логического и функционального стилей программирования. Задания для лабораторных занятий и курсового проектирования имеют проблемный характер, наиболее типичный для задач, решаемых методами и средствами логического и функционального стилей программирования;

-  для проведения лабораторных занятий и курсового проектирования используются методические указания;

-  оценка знаний и умений студентов проводится с помощью экзамена в 5 семестре и государственного экзамена в 8 семестре, экзаменационные вопросы охватывают основные проблемы дисциплины.

3.  ЦЕЛИ учебной дисциплины

После изучения дисциплины студент будет

№ цели

Содержание цели

иметь представление:

1

о множестве задач, решаемых с применением логического и функционального подходов к программированию, и о методах их решения с использованием языков логического и функционального программирования, о разделах дисциплины «Функциональное и логическое программирование», ее структуре;

2

о месте и роли, о состоянии развития современных логических и функциональных языков, о проблемах и направлениях развития этого раздела программирования;

3

о различиях в подходах к решению задач логического и функционального программирования, о вопросах представления данных для решения задач логического и функционального программирования, о приемах разработки программ с применением языков логического и функционального программирования;

4

о проблемах и направлениях развития современных программных средств логического и функционального программирования, об основных методах и средствах автоматизации проектирования, используемых в программных средствах;

5

об основах построения сложных программ.

знать:

6

объект дисциплины (системы разработки программ с использованием языков логического и функционального программирования), предмет дисциплины (методы программирования с использованием языков логического и функционального программирования), задачи дисциплины (разработка программ с применением языков логического и функционального программирования);

7

проблематику дисциплины «Функциональное и логическое программирование» и ее основные разделы;

8

базовые понятия и определения, используемые в логическом и функциональном программировании;

9

методы и уровни представления данных, способы обработки и хранения данных;

10

основы технологии программирования в программных средствах, используемых в современных языках логического и функционального программирования.

уметь:

11

ориентироваться в современных языках логического и функционального программирования, их возможностях;

12

обосновать выбор языка (языка логического или функционального программирования) для решения конкретных задач;

13

обосновать выбор представление данных для решения поставленной задачи;

14

обосновать выбор методов обработки данных для решения поставленной задачи;

15

разрабатывать и тестировать программы с применением программных средств, используемых в современных языках логического или функционального программирования;

16

использовать специальную литературу в изучаемой предметной области.

4.  СОДЕРЖАНИЕ И Структура УЧЕБНОЙ ДИСЦИПЛИНЫ

Содержание учебной дисциплины:

Ссылки

на цели

Часы

Темы лекционных занятий

1, 2, 3, 11

2

Функциональное и логическое программирование как научная дисциплина. Структура дисциплины. Ее связь с другими дисциплинами учебного плана. Особенности предмета дисциплины. Понятие декларативного программирования. Логическая программа: основные конструкции, операционная и декларативная семантика, интерпретация, корректность.

1, 2, 3, 11

2

Общие сведения о языках логического программирования. Constraint–Пролог: операционная семантика. Области применения языка логического программирования PROLOG. Основные элементы языка. Предикаты. Арность предикатов. Металогические предикаты. Внелогические предикаты; Предложения: факты и правила. Переменные. Анонимные переменные. Оформление комментариев. Запросы. Цели.

7, 8, 9, 10

2

Простые объекты данных. Согласование целевых утверждений. Сопоставление и унификация. Равенство и предикат равенства. Основные секции программы. Основные стандартные домены. Объявление нестандартных доменов. Детерминизм.

7, 8, 9, 10

2

Методы поиска. Недетерминированное программирование. Обработка нечетких данных. Основные принципы поиска с возвратом. Поиск всех решений. Стандартный предикат fail. Прерывание поиска с возвратом – отсечение (стандартный предикат!). Способы использования отсечения. «Зеленое» и «красное» отсечения.

7, 8, 9, 10

2

Использование поиска с возвратом в детерминированных предложениях. Отладка программ. Стандартные предикаты ввода и вывода. Арифметические вычисления.

7, 8, 9, 10

2

Составные объекты данных. Функторы. Многоуровневые составные объекты данных. Вычислительная модель; анализ структуры термов. Объявление составных объектов данных. Использование предиката равенства для унификации составных объектов.

7, 8, 9, 10

2

Рекурсивное программирование. Достоинства и недостатки рекурсии. Хвостовая рекурсия. Способы задания хвостовой рекурсии.

7, 8, 9, 10

2

Рекурсивные структуры данных – списки. Объявление списков. Составные списки. Голова и хвост списка. Примеры работы со списками.

7, 8, 9, 10

2

Рекурсивные структуры данных – деревья. Объявление деревьев. Упорядоченные и неупорядоченные деревья. Бинарные поисковые деревья. Способы обхода дерева. Создание дерева. Создание дерева с сохранением упорядоченности.

7, 8, 9, 10

2

Программирование баз данных Динамические базы данных. Программная секция базы данных. Объявление динамической базы данных. Добавление и удаление фактов в динамическую базу данных во время выполнения программы. Сохранение фактов в файле во время выполнения программы. Загрузка фактов из файла во время выполнения программы.

7, 8, 9, 10

2

Обработка строк. Стандартные предикаты для работы со строками. Анализ потока параметров. Контроль потока параметров.

7, 8, 9, 10

2

Файлы. Работа с текстовыми и бинарными файлами. Открытие и закрытие файлов. Стандартные предикаты для работы с файлами.

7, 8, 9, 10

2

Стандартный предикат not. Контроль конца файла. Расширение динамической базы данных с помощью файлов. Работа с фактами динамической базы данных, как с термами. Работа с клавиатурой. Чтение и распознавание клавиш.

7, 8, 9, 10

2

Составные структуры данных – графы. Представление графов. Действия с графами. Ориентированные и неориентированные графы. Поиск ациклического пути в графе.

7, 8, 9, 10

2

Действия с графами. Поиск Гамильтонова пути в графе. Построение остовного дерева графа.

5

2

Стиль программирования на языке PROLOG. Язык PROLOG с процедурной точки зрения. Представление фактов и правил в виде процедур. Использование правил для организации ветвления. Отсечение как оператор безусловного перехода.

5

2

Модульное программирование. Проекты. Примеры использования языка логического программирования PROLOG для решения задач искусственного интеллекта. Неполные структуры данных. Программирование второго порядка.

1, 2, 3, 11

2

Общие сведения о языках функционального программирования. Соответствие между функциональными и императивными программами. Функциональные языки, строго функциональный язык. Конкретные реализации языков функционального программирования. Области применения языка функционального программирования LISP. Основы языка: рекурсивные функции и лямбда-исчисление А. Черча.

7, 8, 9, 10

2

Основные особенности языка LISP. Элементарные понятия. Символьные выражения: атомы и списки. Функции. Инфиксная и префиксная нотация. Программирование в функциональных обозначениях.

7, 8, 9, 10

2

Приемы программирования; представление и интерпретация функциональных программ. Базовые функции. Предикаты. Псевдофункции. Определение функций. Задание параметров функции в лямбда-списке. Передача параметров и область их действия. Отладка программ.

7, 8, 9, 10

2

Вычисления в языке LISP. Управляющие структуры языка LISP. Работа с контекстом.

7, 8, 9, 10

2

Предложения. Локальное присваивание. Последовательное исполнение. Ветвление вычислений. Условное предложение.

7, 8, 9, 10

2

Циклические вычисления. Внутреннее представление списков. Вычисления, изменяющие и не изменяющие структуру выражений. Свойства символа.

7, 8, 9, 10

2

Простая рекурсия. Рекурсия по значению. Рекурсия по аргументу. Параллельная рекурсия. Взаимная рекурсия.

7, 8, 9, 10

2

Рекурсия более высокого порядка. Функциональные аргументы. Функциональное значение функции. Применяющие функционалы. Отображающие функционалы. Массивы. Макросы.

4, 11, 12

1

Обзор основных вопросов, рассмотренных в дисциплине. Перспективы дальнейшего развития теории и практики функционального и логического программирования, применения функционального программирования, применение логического программирования в задачах искусственного интеллекта.

Ссылки

на цели

Часы

Темы лабораторных занятий

Учебная деятельность

13, 14, 15, 16

4

Знакомство с основами языка логического программирования PROLOG.

-  изучает возможности программной оболочки;

-  использует способы представления данных в виде фактов и правил вывода для записи программы на языке PROLOG;

-  используя возможности, предоставляемые программной оболочкой, проверяет правильность работы созданной программы;

-  оформляет результаты работы программы;

-  оценивает полученные результаты.

13, 14, 15, 16

4

Разработка программ, использующих для нахождения решений рекурсию и поиск с возвратом.

-  использует способы представления данных в виде фактов и правил вывода для записи программы на языке PROLOG;

-  проверяет правильность работы созданной программы;

-  исследует различия в двух методах нахождения решений: рекурсии и поиске с возвратом;

-  оформляет результаты работы программы;

-  оценивает полученные результаты.

13, 14, 15, 16

4

Разработка программ для работы с рекурсивными структурами данных (списками и деревьями)

-  использует способы представления данных в виде фактов и правил вывода для записи программы на языке PROLOG;

-  проверяет правильность работы созданной программы;

-  исследует методы работы с рекурсивными структурами данных (списками и деревьями);

-  оформляет результаты работы программы;

-  оценивает полученные результаты.

13, 14, 15, 16

4

Знакомство с основами языка функционального программирования LISP.

-  использует способы представления данных в виде функций для записи программы на языке LISP;

-  проверяет правильность работы созданной программы;

-  оформляет результаты работы программы;

-  оценивает полученные результаты.


Структура учебной дисциплины:

5.  УЧЕБНАЯ ДЕЯТЕЛЬНОСТЬ

В течение семестра студентами выполняется курсовой проект. В рамках курсового проекта студентам предлагается реализовать программу с использованием языка логического или функционального программирования, в ходе курсового проектирования студенты разрабатывают программу на языке логического или функционального программирования, проверяют правильность работы программы, оценивают полученные результаты, оформляют пояснительную записку.

Цель курсового проектирования – обобщить и структурировать знания, полученные в рамках дисциплины «Функциональное и логическое программирование», научить студентов разрабатывать и отлаживать программы с использованием языков логического или функционального программирования.

Образец задания:

Разработать программу для работы с бинарными упорядоченными деревьями. Реализовать следующие функции: создание дерева, загрузку дерева из файла, сохранение дерева в файле, добавление вершины с сохранением упорядоченности, удаление вершины, все виды обхода дерева, просмотр дерева в традиционном представлении (корень вверху, листьевые вершины внизу.)

Требования к оформлению пояснительной записки:

Пояснительная записка к курсовому проекту должна содержать: титульный лист, задание на курсовой проект, назначение программного продукта, описание данных, описание методов решения, описание разработанного программного продукта, описание пользовательского интерфейса, список использованной литературы и/или адресов www, приложение – исходные тексты с комментариями.

6.  ПРАВИЛА АТТЕСТАЦИИ СТУДЕНТОВ ПО УЧЕБНОЙ ДИСЦИПЛИНЕ

По окончании учебной дисциплины проводится устный экзамен. Экзаменационный билет включает два теоретических вопроса и одну практическую задачу.

Для получения оценки «отлично» требуется правильно (75-100%) ответить на теоретические вопросы экзаменационного билета и дополнительные вопросы, правильно решить практическую задачу.

Для получения оценки «хорошо» требуется правильно (50-75%) ответить на теоретические вопросы экзаменационного билета и дополнительные вопросы, правильно решить практическую задачу.

Для получения оценки «удовлетворительно» требуется правильно (не менее 50%) ответить на теоретические вопросы экзаменационного билета и дополнительные вопросы, правильно решить практическую задачу.

7.  СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ

Основная литература:

1.  Адаменко А. Н., Кучуков  программирование и Visual Prolog. – СПб.: БХВ-Петербург, 2003. – 992 С.

2.  Братко И. Программирование на языке Пролог для искусственного интеллекта. – М.: Мир, 1990. – 560 С.

3.  Ин Ц., Соломон Д. Использование Турбо-Пролога. – М.: Мир, 1993. – 608 С.

4.  Клоксин У., Меллиш Д. Программирование на языке Пролог. – М.: Мир, 1987. – 336 С.

5.  Стерлинг Л., Шапиро Э. Искусство программирования на языке Пролог. – М.: Мир, 1990. – 235 С.

6.  Доорс Дж. и др., Рейблейн А. Р., Вадера С. Пролог ‑ язык программирования будущего. – М.: ФиС, 1990. – 144 С.

7.  Стобо Дж. Язык программирования Пролог. – М.: Мир, 1993. – 368 С.

8.  Хювёнен Э., Сеппянен Й. Мир Лиспа. ‑ М.: Мир, 1990. – 447 С.

9.  Хендерсон П. Функциональное программирование: применение и реализация. ‑ М.: Мир, 1983. – 349 С.

Дополнительная литература:

10.  Новицкая  логического и функционального программирования (учебное пособие). – http://ermak. cs. *****/flp/

11.  Сырецкий . Часть III. Основы логического программирования на PDC Prolog (учебное пособие). – Новосибирск: НГТУ, 1994. – 93 С.

12.  Малпас Дж. Реляционный язык Пролог и его применение. – М.: Наука, 1990. – 463 С.

13.  Янсон А. Турбо-Пролог в сжатом изложении. – М.: Мир, 1991. – 94 С.

14.  Маурер У. Введение в программирование на языке ЛИСП. – М.: Мир, 1978. – 104 С.

8.  КОНТРОЛИРУЮЩИЕ МАТЕРИАЛЫ ДЛЯ АТТЕСТАЦИИ СТУДЕНТОВ ПО ДИСЦИПЛИНЕ

Список экзаменационных вопросов:

1.  Сравнительная характеристика декларативных и процедурных языков программирования. Языки PROLOG и LISP как языки декларативного и функционального программирования. Основные отличия, области применения.

2.  Предикаты. Предложения: факты и правила.

3.  Запросы (цели). Переменные.

4.  Основные секции программы.

5.  Основные стандартные домены.

6.  Сопоставление и унификация. Предикат равенства.

7.  Основные принципы поиска с возвратом.

8.  Управление поиском решений (предикат fail).

9.  Управление поиском решений (предикат!).

10.  Управление поиском решений (динамическое отсечение).

11.  Детерминизм.

12.  Анализ и контроль потока параметров.

13.  Простые объекты данных. Составные объекты данных.

14.  Многоуровневые составные объекты данных.

15.  Аргументы множественных типов.

16.  Предикат repeat.

17.  Рекурсия.

18.  Хвостовая рекурсия.

19.  Деревья: объявление и обход.

20.  Списки: объявление и примеры работы.

21.  Составные списки: объявление и примеры работы.

22.  Динамические базы данных: объявление и использование.

23.  Динамические базы данных: загрузка и сохранение фактов.

24.  Динамические базы данных: добавление и удаление фактов.

25.  Стандартные предикаты ввода и вывода.

26.  Работа со строками.

27.  Работа с файлами: чтение и запись.

28.  Графы: представление графов.

29.  Графы: действия над графами.

30.  Обработка ошибок и исключительных ситуаций.

31.  Основы языка LISP. Лямбда-выражение и лямбда-вызов.

32.  Символьные выражения: атомы и списки.

33.  Функции, определение функций. Параметры функции: передача и область действия.

34.  Базовые функции. Списки: работа со списками.

35.  Управляющие структуры.

36.  Структуроразрушающие функции.

37.  Внутреннее представление списков. Точечная пара.

38.  Свойства символа. Действия со списком свойств символа.

39.  Простая рекурсия. Рекурсия по значению и рекурсия по аргументу.

40.  Параллельная рекурсия. Взаимная рекурсия.

41.  Рекурсия более высокого порядка

42.  Применяющие функционалы.

43.  Отображающие функционалы.

44.  Ассоциативные списки.

Примеры экзаменационных задач:

1.  Написать программу для вычисления xn только с помощью умножения (построить дерево целей).

2.  Написать программу для циклического сдвига списка на n элементов влево (построить дерево целей).

3.  Имеется база данных, содержащая факты numbers(n1, n2), где n1 и n2 – целые числа. Написать программу для удаления всех фактов, где n1=n2.

4.  Написать программу для перевода списка чисел, записанных с использованием римских цифр, в список чисел, записанных с использованием арабских цифр. Использовать факты вида trans(“I”, 1).

5.  Написать программу для нахождения числа вершин с положительными значениями в дереве целых (построить дерево целей).