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

advertisement
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
ФАКУЛЬТЕТ АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ
КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ
«УТВЕРЖДАЮ»
Декан АВТФ
д.т.н., проф. В.В. Губарев
______________________
31 августа 2005 г.
РАБОЧАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ
«ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ»
Основная образовательная Направление 230100 –
программа:
вычислительная техника»
(бакалавриат)
Направление 654600 –
вычислительная техника»
(инженерная подготовка)
«Информатика
и
«Информатика
и
Специализация:
230105
–
«Программное
обеспечение
вычислительной техники и автоматизированных
систем»
Факультет:
автоматики и вычислительной техники
(очная форма обучения)
3
5
51 час
17 часов
5 семестр
72 часа
5 семестр
8 семестр
140 часов
Курс:
Семестр:
Лекции:
Лабораторные занятия:
Курсовой проект:
Самостоятельная работа:
Экзамен:
Государственный экзамен:
Всего:
Новосибирск
2005 г.
Рабочая
программа
составлена
на
основании
Государственного
образовательного стандарта высшего профессионального образования
(ГОСВПО) по направлению 230100 (654600) – «Информатика и
вычислительная техника».
Регистрационный номер и дата утверждения ГОСВПО по направлению 230100
(654600) – «Информатика и вычислительная техника»: 35 тех/бак, 13 марта
2000 г. (224 тех/дс, 27 марта 2000 г.)
Индекс дисциплины в ГОСВПО - СД.00 (СД.02)
Компонент – национально-региональный (вузовский)
Цикл СД – Специальные дисциплины
Учебный план по направлению 230100 – «Информатика и вычислительная
техника», специализация 230105 – «Программное обеспечение вычислительной
техники и автоматизированных систем» (набор 2001 г. и последующие)
Рабочая программа обсуждена на заседании кафедры вычислительной техники
31 августа 2005 г., протокол №7.
Программу разработала
ст. преп. кафедры ВТ
Ю.В. Новицкая
Зав. кафедрой ВТ,
ответственный за основную
образовательную программу
по направлениям
230100 и 654600, д.т.н., проф.
В.В. Губарев
1. ВНЕШНИЕ ТРЕБОВАНИЯ
Квалификационные требования ГОСВПО по направлению 230100 –
«Информатика и вычислительная техника»:
1.3.5. Квалификационные требования
Для компетентного и ответственного решения профессиональных задач
бакалавр:
 готов участвовать во всех фазах проектирования и разработки объектов
профессиональной деятельности;
 готов участвовать в разработке всех видов документации на программные,
аппаратные и программно-аппаратные комплексы;
 способен использовать современные методы, средства и технологии
разработки объектов профессиональной деятельности;
 готов участвовать в проведении научных исследований и выполнении
технических разработок в своей профессиональной области;
 способен изучать специальную литературу и другую научно-техническую
информацию, достижения отечественной и зарубежной науки и техники в
области своей профессиональной деятельности;
 взаимодействует со специалистами смежного профиля при разработке
методов, средств и технологий применения объектов профессиональной
деятельности в научных
исследованиях и проектно-конструкторской
деятельности,
в управлении
технологическими, экономическими,
социальными системами и в гуманитарных областях деятельности человека;
 готов к кооперации с коллегами и работе в коллективе при разработке
объектов профессиональной деятельности;
 умеет на научной основе организовать свой труд, владеет современными
информационными
технологиями,
применяемыми
в сфере его
профессиональной деятельности;
 способен в условиях развития науки и изменяющейся социальной
практики к переоценке накопленного опыта, анализу своих возможностей,
умеет приобретать новые знания, используя современные информационные
образовательные технологии;
 методически и психологически готов к изменению вида и характера своей
профессиональной деятельности, работе над междисциплинарными
проектами.
Бакалавр должен знать:
 методические и нормативные материалы по проектированию и разработке
объектов профессиональной деятельности;
 технологию проектирования и разработки объектов профессиональной
деятельности;
 перспективы и тенденции развития информационных технологий;
 технические характеристики и экономические показатели лучших отечественных и зарубежных образцов объектов профессиональной
деятельности;
 порядок, методы и средства защиты интеллектуальной собственности;
 методы анализа качества объектов профессиональной деятельности;
 современные средства вычислительной техники, коммуникаций и связи;
 основные требования к организации труда при проектировании объектов
профессиональной деятельности;
 правила, методы и средства подготовки технической документации;
 основы экономики, организации труда, организации
производства и
научных исследований;
 основы трудового законодательства;
 правила и нормы охраны труда.
Требования ГОСВПО к обязательному минимуму содержания по
направлению 654600 – «Информатика и вычислительная техника»:
Индекс
Наименование дисциплины и ее основные разделы
Часы
СД.02
Функциональное и логическое программирование:
140
рекурсивные функции и лямбда-исчисление А.Черча;
программирование в функциональных обозначениях;
функциональные языки; строго функциональный язык;
приемы
программирования;
представление
и
интерпретация функциональных
программ; отладка
программ;
конкретные
реализации
языков
функционального
программирования;
соответствие
между
функциональными
и
императивными
программами;
применения
функционального
программирования;
логическая
программа:
основные
конструкции,
операционная и декларативная семантика, интерпретация,
корректность;
программирование
баз
данных;
рекурсивное программирование; вычислительная модель;
анализ структуры термов; металогические предикаты;
внелогические
предикаты;
недетерминированное
программирование; неполные
структуры
данных;
программирование второго порядка; методы поиска;
обработка
нечетких
данных;
Constraint–Пролог:
операционная семантика; применение логического
программирования в задачах искусственного интеллекта.
2. ОСОБЕННОСТИ (ПРИНЦИПЫ) ПОСТРОЕНИЯ
ДИСЦИПЛИНЫ
В
основу
дисциплины
«Функциональное
программирование» положены следующие принципы:
и
логическое
 дисциплина входит в число дисциплин, включенных в учебный план на
основании Государственного образовательного стандарта высшего
профессионального образования по направлению 230100 (654600) –
«Информатика и вычислительная техника»;
 основной целью дисциплины является формирование и закрепление
системного подхода при разработке программ с применением языков
логического и функционального программирования, в дисциплине
рассматриваются средства и методы создания таких программ;
 ядро дисциплины составляют средства и приемы создания программ с
использованием языков логического и функционального программирования;
 для успешного изучения дисциплины студенту необходимо знать основы
математической логики;
 в дисциплине выделены две родственные составляющие: логическое
программирование и функциональное программирование, соответственно
рассматриваются средства и методы создания программ для каждой
составляющей;
 в дисциплине закрепляются такие общепредметные умения, как выбор язык
программирования для решения поставленной задачи, выбор способа
представления исходных данных и выбор метода решения поставленной
задачи;
 дисциплина имеет практическую часть (лабораторные работы - 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,
2
Функциональное и логическое программирование как научная
11
дисциплина. Структура дисциплины. Ее связь с другими
дисциплинами учебного плана. Особенности предмета
дисциплины. Понятие декларативного программирования.
Логическая программа: основные конструкции, операционная
и декларативная семантика, интерпретация, корректность.
1, 2, 3,
2
Общие сведения о языках логического программирования.
11
Constraint–Пролог:
операционная
семантика.
Области
применения языка логического программирования PROLOG.
Основные элементы языка. Предикаты. Арность предикатов.
Металогические предикаты. Внелогические предикаты;
Предложения: факты и правила. Переменные. Анонимные
переменные. Оформление комментариев. Запросы. Цели.
7, 8, 9,
2
Простые
объекты
данных.
Согласование
целевых
10
утверждений. Сопоставление и унификация. Равенство и
предикат равенства. Основные секции программы. Основные
стандартные домены. Объявление нестандартных доменов.
Детерминизм.
7, 8, 9,
2
Методы поиска. Недетерминированное программирование.
10
Обработка нечетких данных. Основные принципы поиска с
возвратом. Поиск всех решений. Стандартный предикат fail.
Прерывание поиска с возвратом – отсечение (стандартный
предикат !). Способы использования отсечения. «Зеленое» и
«красное» отсечения.
7, 8, 9,
2
Использование поиска с возвратом в детерминированных
10
предложениях. Отладка программ. Стандартные предикаты
ввода и вывода. Арифметические вычисления.
7, 8, 9,
2
Составные объекты данных. Функторы. Многоуровневые
10
составные объекты данных. Вычислительная модель; анализ
структуры термов. Объявление составных объектов данных.
Использование предиката равенства для унификации
составных объектов.
7, 8, 9,
2
Рекурсивное программирование. Достоинства и недостатки
10
рекурсии. Хвостовая рекурсия. Способы задания хвостовой
рекурсии.
7, 8, 9,
2
Рекурсивные структуры данных – списки. Объявление
10
списков. Составные списки. Голова и хвост списка. Примеры
работы со списками.
Ссылки
Часы
Темы лекционных занятий
на цели
7, 8, 9,
2
Рекурсивные структуры данных – деревья. Объявление
10
деревьев. Упорядоченные и неупорядоченные деревья.
Бинарные поисковые деревья. Способы обхода дерева.
Создание дерева. Создание дерева с сохранением
упорядоченности.
7, 8, 9,
2
Программирование баз данных Динамические базы данных.
10
Программная секция базы данных. Объявление динамической
базы данных. Добавление и удаление фактов в динамическую
базу данных во время выполнения программы. Сохранение
фактов в файле во время выполнения программы. Загрузка
фактов из файла во время выполнения программы.
7, 8, 9,
2
Обработка строк. Стандартные предикаты для работы со
10
строками. Анализ потока параметров. Контроль потока
параметров.
7, 8, 9,
2
Файлы. Работа с текстовыми и бинарными файлами.
10
Открытие и закрытие файлов. Стандартные предикаты для
работы с файлами.
7, 8, 9,
2
Стандартный предикат not. Контроль конца файла.
10
Расширение динамической базы данных с помощью файлов.
Работа с фактами динамической базы данных, как с термами.
Работа с клавиатурой. Чтение и распознавание клавиш.
7, 8, 9,
2
Составные структуры данных – графы. Представление графов.
10
Действия с графами. Ориентированные и неориентированные
графы. Поиск ациклического пути в графе.
7, 8, 9,
2
Действия с графами. Поиск Гамильтонова пути в графе.
10
Построение остовного дерева графа.
5
2
Стиль программирования на языке PROLOG. Язык PROLOG с
процедурной точки зрения. Представление фактов и правил в
виде процедур. Использование правил для организации
ветвления. Отсечение как оператор безусловного перехода.
5
2
Модульное
программирование.
Проекты.
Примеры
использования
языка
логического
программирования
PROLOG для решения задач искусственного интеллекта.
Неполные структуры данных. Программирование второго
порядка.
1, 2, 3,
2
Общие
сведения
о
языках
функционального
11
программирования. Соответствие между функциональными и
императивными программами. Функциональные языки,
строго функциональный язык. Конкретные реализации языков
функционального программирования. Области применения
языка функционального программирования LISP. Основы
языка: рекурсивные функции и лямбда-исчисление А.Черча.
Ссылки
Часы
Темы лекционных занятий
на цели
7, 8, 9,
2
Основные особенности языка LISP. Элементарные понятия.
10
Символьные выражения: атомы и списки. Функции.
Инфиксная и префиксная нотация. Программирование в
функциональных обозначениях.
7, 8, 9,
2
Приемы программирования; представление и интерпретация
10
функциональных программ. Базовые функции. Предикаты.
Псевдофункции. Определение функций. Задание параметров
функции в лямбда-списке. Передача параметров и область их
действия. Отладка программ.
7, 8, 9,
2
Вычисления в языке LISP. Управляющие структуры языка
10
LISP. Работа с контекстом.
7, 8, 9,
2
Предложения. Локальное присваивание. Последовательное
10
исполнение. Ветвление вычислений. Условное предложение.
7, 8, 9,
2
Циклические вычисления. Внутреннее представление списков.
10
Вычисления, изменяющие и не изменяющие структуру
выражений. Свойства символа.
7, 8, 9,
2
Простая рекурсия. Рекурсия по значению. Рекурсия по
10
аргументу. Параллельная рекурсия. Взаимная рекурсия.
7, 8, 9,
2
Рекурсия более высокого порядка. Функциональные
10
аргументы.
Функциональное
значение
функции.
Применяющие функционалы. Отображающие функционалы.
Массивы. Макросы.
4, 11, 12
1
Обзор основных вопросов, рассмотренных в дисциплине.
Перспективы дальнейшего развития теории и практики
функционального
и
логического
программирования,
применения
функционального
программирования,
применение логического программирования в задачах
искусственного интеллекта.
Ссылки
Темы лабораторных
Часы
Учебная деятельность
на цели
занятий
13, 14,
4
Знакомство
с  изучает возможности программной
15, 16
основами
языка
оболочки;
логического
 использует способы представления
программирования
данных в виде фактов и правил
PROLOG.
вывода для записи программы на
языке PROLOG;
 используя
возможности,
предоставляемые
программной
оболочкой, проверяет правильность
работы созданной программы;
 оформляет
результаты
работы
программы;
 оценивает полученные результаты.
Ссылки
Темы лабораторных
Часы
Учебная деятельность
на цели
занятий
13, 14,
4
Разработка
 использует способы представления
15, 16
программ,
данных в виде фактов и правил
использующих для
вывода для записи программы на
нахождения решений
языке PROLOG;
рекурсию и поиск с  проверяет правильность работы
возвратом.
созданной программы;
 исследует различия в двух методах
нахождения решений: рекурсии и
поиске с возвратом;
 оформляет
результаты
работы
программы;
 оценивает полученные результаты.
13, 14,
4
Разработка программ  использует способы представления
15, 16
для
работы
с
данных в виде фактов и правил
рекурсивными
вывода для записи программы на
структурами данных
языке PROLOG;
(списками
и  проверяет правильность работы
деревьями)
созданной программы;
 исследует
методы
работы
с
рекурсивными структурами данных
(списками и деревьями);
 оформляет
результаты
работы
программы;
 оценивает полученные результаты.
13, 14,
4
Знакомство
с  использует способы представления
15, 16
основами
языка
данных в виде функций для записи
функционального
программы на языке LISP;
программирования
 проверяет правильность работы
LISP.
созданной программы;
 оформляет
результаты
работы
программы;
 оценивает полученные результаты.
Структура учебной дисциплины:
Блок 1.
Рассмотрение круга задач, решаемых с
применением
языков
логического
и
функционального
программирования,
рассмотрение особенностей декларативных
языков программирования (вводная часть).
(Цели 1-5)
Язык
логического
программирования
PROLOG
Язык функционального
программирования LISP
Блок 2.
Рассмотрение
синтаксиса
языков
логического
и
функционального
программирования.
(Цели 6, 7, 8)
Блок 3.
Рассмотрение
способов
представления
данных, методов и приемов логического и
функционального программирования.
(Цели 9, 10)
Блок 4.
Разработка
программ
для
решения
конкретных задач различных типов с
выбором
языка
программирования,
способов представления данных, методов и
приемов логического и функционального
программирования.
(Цели 11-16)
5. УЧЕБНАЯ ДЕЯТЕЛЬНОСТЬ
В течение семестра студентами выполняется курсовой проект. В рамках
курсового проекта студентам предлагается реализовать программу с
использованием языка логического или функционального программирования, в
ходе курсового проектирования студенты разрабатывают программу на языке
логического
или
функционального
программирования,
проверяют
правильность работы программы, оценивают полученные результаты,
оформляют пояснительную записку.
Цель курсового проектирования – обобщить и структурировать знания,
полученные в рамках дисциплины «Функциональное и логическое
программирование», научить студентов разрабатывать и отлаживать
программы с использованием языков логического или функционального
программирования.
Образец задания:
Разработать программу для работы с бинарными упорядоченными
деревьями. Реализовать следующие функции: создание дерева, загрузку дерева
из файла, сохранение дерева в файле, добавление вершины с сохранением
упорядоченности, удаление вершины, все виды обхода дерева, просмотр дерева
в традиционном представлении (корень вверху, листьевые вершины внизу.)
Требования к оформлению пояснительной записки:
Пояснительная записка к курсовому проекту должна содержать:
титульный лист, задание на курсовой проект, назначение программного
продукта, описание данных, описание методов решения, описание
разработанного программного продукта, описание пользовательского
интерфейса, список использованной литературы и/или адресов www,
приложение – исходные тексты с комментариями.
6. ПРАВИЛА АТТЕСТАЦИИ СТУДЕНТОВ ПО УЧЕБНОЙ
ДИСЦИПЛИНЕ
По окончании учебной дисциплины проводится устный экзамен.
Экзаменационный билет включает два теоретических вопроса и одну
практическую задачу.
Для получения оценки «отлично» требуется правильно (75-100%)
ответить на теоретические вопросы экзаменационного билета и
дополнительные вопросы, правильно решить практическую задачу.
Для получения оценки «хорошо» требуется правильно (50-75%) ответить
на теоретические вопросы экзаменационного билета и дополнительные
вопросы, правильно решить практическую задачу.
Для получения оценки «удовлетворительно» требуется правильно (не
менее 50%) ответить на теоретические вопросы экзаменационного билета и
дополнительные вопросы, правильно решить практическую задачу.
7. СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
Основная литература:
1.
2.
3.
4.
5.
6.
7.
8.
9.
Адаменко А.Н., Кучуков А.М. Логическое программирование и Visual
Prolog. – СПб.: БХВ-Петербург, 2003. – 992 С.
Братко И. Программирование на языке Пролог для искусственного
интеллекта. – М.: Мир, 1990. – 560 С.
Ин Ц., Соломон Д. Использование Турбо-Пролога. – М.: Мир, 1993. –
608 С.
Клоксин У., Меллиш Д. Программирование на языке Пролог. – М.: Мир,
1987. – 336 С.
Стерлинг Л., Шапиро Э. Искусство программирования на языке Пролог. –
М.: Мир, 1990. – 235 С.
Доорс Дж. и др., Рейблейн А.Р., Вадера С. Пролог - язык
программирования будущего. – М.: ФиС, 1990. – 144 С.
Стобо Дж. Язык программирования Пролог. – М.: Мир, 1993. – 368 С.
Хювёнен Э., Сеппянен Й. Мир Лиспа. - М.: Мир, 1990. – 447 С.
Хендерсон П. Функциональное программирование: применение и
реализация. - М.: Мир, 1983. – 349 С.
Дополнительная литература:
10. Новицкая Ю.В.
Основы
логического
и
функционального
программирования (учебное пособие). – http://ermak.cs.nstu.ru/flp/
11. Сырецкий Г.А.
Информатика.
Часть
III.
Основы
логического
программирования на PDC Prolog (учебное пособие). – Новосибирск:
НГТУ, 1994. – 93 С.
12. Малпас Дж. Реляционный язык Пролог и его применение. – М.: Наука,
1990. – 463 С.
13. Янсон А. Турбо-Пролог в сжатом изложении. – М.: Мир, 1991. – 94 С.
14. Маурер У. Введение в программирование на языке ЛИСП. – М.: Мир,
1978. – 104 С.
8. КОНТРОЛИРУЮЩИЕ МАТЕРИАЛЫ ДЛЯ АТТЕСТАЦИИ
СТУДЕНТОВ ПО ДИСЦИПЛИНЕ
Список экзаменационных вопросов:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Сравнительная характеристика декларативных и процедурных языков
программирования. Языки PROLOG и LISP как языки декларативного и
функционального программирования. Основные отличия, области
применения.
Предикаты. Предложения: факты и правила.
Запросы (цели). Переменные.
Основные секции программы.
Основные стандартные домены.
Сопоставление и унификация. Предикат равенства.
Основные принципы поиска с возвратом.
Управление поиском решений (предикат fail).
Управление поиском решений (предикат !).
Управление поиском решений (динамическое отсечение).
Детерминизм.
Анализ и контроль потока параметров.
Простые объекты данных. Составные объекты данных.
Многоуровневые составные объекты данных.
Аргументы множественных типов.
Предикат repeat.
Рекурсия.
Хвостовая рекурсия.
Деревья: объявление и обход.
Списки: объявление и примеры работы.
Составные списки: объявление и примеры работы.
Динамические базы данных: объявление и использование.
Динамические базы данных: загрузка и сохранение фактов.
Динамические базы данных: добавление и удаление фактов.
Стандартные предикаты ввода и вывода.
Работа со строками.
Работа с файлами: чтение и запись.
Графы: представление графов.
Графы: действия над графами.
Обработка ошибок и исключительных ситуаций.
Основы языка LISP. Лямбда-выражение и лямбда-вызов.
Символьные выражения: атомы и списки.
Функции, определение функций. Параметры функции: передача и область
действия.
Базовые функции. Списки: работа со списками.
Управляющие структуры.
Структуроразрушающие функции.
Внутреннее представление списков. Точечная пара.
Свойства символа. Действия со списком свойств символа.
39.
40.
41.
42.
43.
44.
Простая рекурсия. Рекурсия по значению и рекурсия по аргументу.
Параллельная рекурсия. Взаимная рекурсия.
Рекурсия более высокого порядка
Применяющие функционалы.
Отображающие функционалы.
Ассоциативные списки.
Примеры экзаменационных задач:
1. Написать программу для вычисления xn только с помощью умножения
(построить дерево целей).
2. Написать программу для циклического сдвига списка на n элементов влево
(построить дерево целей).
3. Имеется база данных, содержащая факты numbers(n1, n2), где n1 и n2 –
целые числа. Написать программу для удаления всех фактов, где n1=n2.
4. Написать программу для перевода списка чисел, записанных с
использованием римских цифр, в список чисел, записанных с
использованием арабских цифр. Использовать факты вида trans(“I”, 1).
5. Написать программу для нахождения числа вершин с положительными
значениями в дереве целых (построить дерево целей).
Download