48
ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ Направление 231000.62 – Программная инженерия, 7 семестр Ст. преподаватель каф. ВТ НГТУ Юлия Вадимовна Новицкая Email: [email protected] Web: http://ermak.cs.nstu.ru /flp ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ Направление 230100.62 – Информатика и ВТ, 7 семестр

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

  • Upload
    lowri

  • View
    71

  • Download
    3

Embed Size (px)

DESCRIPTION

Ст. преподаватель каф. ВТ НГТУ Юлия Вадимовна Новицкая Email: [email protected] Web: http://ermak.cs.nstu.ru/flp. ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ. Направление 231000.62 – Программная инженерия, 7 семестр. ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ. - PowerPoint PPT Presentation

Citation preview

Page 1: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

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

Направление 231000.62 – Программная инженерия, 7 семестр

Ст. преподаватель каф. ВТ НГТУЮлия Вадимовна НовицкаяEmail: [email protected]: http://ermak.cs.nstu.ru/flp

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

Направление 230100.62 – Информатика и ВТ, 7 семестр

Page 2: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ПРЕДМЕТ ИЗУЧЕНИЯ

• ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕязык программирования Lisp(LISt Processing)

• ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕязык программирования Prolog(PROgramming in LOGic)

Page 3: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

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

• Лекции – 34 часа(17 лекций)

• Лабораторные работы (ЛР) – 17 часов(4 лаб. работы)

• Расчетно-графическое задание (РГЗ)(получение задания на 2-й лаб. работе)

• Экзамен

Page 4: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ (ФП)

• Лекции – 34 часа(17 лекций)

• Лабораторные работы (ЛР) – 17 часов(4 лаб. работы)

• Расчетно-графическое задание (РГЗ)(получение задания на 2-й лаб. работе)

• Диф. зачет

Page 5: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ (ЛП)

• Лекции – 17 часов(8 лекций)

• Лабораторные работы (ЛР) – 17 часов(4 лаб. работы)

• Расчетно-графическое задание (РГЗ)(получение задания на 2-й лаб. работе)

• Диф. зачет

Page 6: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

БАЛЛЬНО-РЕЙТИНГОВАЯ СИСТЕМАФЛП

• Дисциплина в целом – 100 баллов– 60 баллов в семестре– 40 баллов на экзамене

• Лабораторные работы с №1 по №4– 6 12 баллов

• Расчетно-графическое задание– 6 12 баллов

• Срок защиты ЛР без потери баллов – одна неделя после лабораторной работы по расписанию

• Срок защиты РГЗ без потери баллов– ФЛП – 17 неделя

Page 7: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

БАЛЛЬНО-РЕЙТИНГОВАЯ СИСТЕМАФП и ЛП

• Дисциплина в целом – 100 баллов– 80 баллов в семестре– 20 баллов на зачете

• Лабораторные работы с №1 по №4– 8 16 баллов

• Расчетно-графическое задание– 8 16 баллов

• Срок защиты ЛР без потери баллов – одна неделя после лабораторной работы по расписанию

• Срок защиты РГЗ без потери баллов– ФП – 16 неделя, ЛП – 16 неделя

Page 8: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ОТЧЕТНОСТЬ

• Отчеты по лабораторным работам представляются в электронном виде одним файлом в конце семестра

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

Page 9: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

УЧЕБНЫЕ МАТЕРИАЛЫ

Page 10: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 11: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ИСТОЧНИКИ (ОСНОВНЫЕ)• Адаменко А.Н., Кучуков А.М. Логическое программирование и Visual

Prolog. - СПб.: БХВ-Петербург, 2003. - 992 С.• Братко И. Алгоритмы искусственного интеллекта на языке Prolog. –

М. : Вильямс , 2004. – 637 с.• Городняя Л.В. Основы функционального программирования. – М. :

ИНТУИТ.РУ , 2004. – 272 с.• Ин Ц., Соломон Д. Использование Турбо-Пролога. - М.: Мир, 1993. -

608 С.• Непейвода Н.Н. Стили и методы программирования. – М.: Интернет-

университет информационных технологий, 2005. – 316 с.

Page 12: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ИСТОЧНИКИ (ОСНОВНЫЕ)• Стерлинг Л., Шапиро Э. Искусство программирования на языке

Пролог. - М.: Мир, 1990. - 235 С.• Хювёнен Э., Сеппянен Й. Мир Лиспа. М.: Мир, 1990. - 447 С.• Цуканова Н.И., Дмитриева Т.А. Логическое программирование на

языке Visual Prolog. - М.: Горячая Линия - Телеком, 2008. - 144 С.• Чанышев О.Г. ПРОграммирование в ЛОГике. – Омск : Изд-во ОмГУ ,

2004. – 63 с.• Шрайнер П.А. Основы программирования на языке Пролог. Курс

лекций. - М.: Интернет-университет информационных технологий, 2005. - 176 С.

Page 13: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ИСТОЧНИКИ (ДОПОЛНИТЕЛЬНЫЕ)

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

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

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

• Полещук Н., Лоскутов П. AutoLISP и Visual LISP в среде AutoCAD. - СПб.: БХВ-Петербург, 2006. - 960 С.

• Стобо Дж. Язык программирования Пролог. - М.: Мир, 1993. - 368 С.• Хендерсон П. Функциональное программирование: применение и

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

Page 14: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ИНТЕРНЕТ-РЕСУРСЫ• Программирование на языке ПРОЛОГ [Электронный ресурс]. –

Электрон. дан. – USAM SRL, cop. 2009. – Режим доступа : http://www.prolog.md

• Русскоязычное сообщество лисперов [Электронный ресурс]. – Электрон. дан. – Lisp.ru, cop. 2008-2010. – Режим доступа : http://lisp.ru

• Lisper.ru [Электронный ресурс]. – Электрон. дан. – lisper.ru, cop. 2009-2010. – Режим доступа : http://lisper.ru

• Home Lisp [Электронный ресурс]. – Электрон. дан. – Режим доступа : http://homelisp.ru

• XLISP Home Page [Electronic resource]. – Electronic data. – Mode acess : http://xlisp.org

• Amzi! inc. [Electronic resource]. – Electronic data. – Mode acess : http://www.amzi.com

Page 15: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ИНТЕРНЕТ-РЕСУРСЫ• Association of Lisp Users [Electronic resource]. – Electronic data. – Mode

acess : http://www.lisp.org• LispWorks [Electronic resource]. – Electronic data. – LispWorks Ltd., cop.

2001-2011. – Mode acess : http://www.lispworks.com• Prolog Development Center [Electronic resource]. – Electronic data. –

Copenhagen, cop. 1983-2011. – Mode acess : http://www.pdc.dk• SWI-Prolog [Electronic resource]. – Electronic data. – Mode acess :

http://www.swi-prolog.org• Visual Prolog [Electronic resource]. – Electronic data. – Mode acess :

http://www.visual-prolog.com

Page 16: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ПАРАДИГМА

• Парадигма – это система взглядов на явления окружающего мира и представлений о возможных взаимодействиях с ними

• Парадигма программирования – система идей и понятий, определяющих фундаментальный стиль программирования

Page 17: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ

• декларативная– логическая– функциональная

• императивная• объектно-ориентированная• параллельная• процедурная• …

Page 18: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ

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

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

Page 19: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

КЛАССИФИКАЦИЯ

Page 20: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ОТЛИЧИЯ• Алгоритмический (процедурный) способ программирования

соответствует вопросу «как» (необходимо описать, как решается задача), декларативный способ – вопросу «что» (достаточно описать, что должно быть решено)

• Программа на декларативном языке состоит из двух компонент: условия задачи (которую иногда называют «базой данных») и целевого запроса

• Для декларативного программирования необходимо наличие «решателя» (называемого обычно интерпретатором), который «знает» как выполнить целевой запрос, исходя из условий, представленных в «базе данных»

Page 21: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ОБЛАСТИ ПРИМЕНЕНИЯ ДЕКЛАРАТИВНЫХ ЯЗЫКОВ

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

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

• Создание систем искусственного интеллекта• Разработка экспертных систем и оболочек экспертных систем• Создание систем помощи принятия решений• Разработка систем обработки естественного языка• Построение планов действий роботов• …

Page 22: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

Современное состояние ЛП

• Visual Prolog 7.5• Разработкой языка занимается фирма PDC

Prolog Development Center• http://www.pdc.dk

Page 23: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 24: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 25: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 26: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 27: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 28: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 29: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 30: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 31: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

Современное состояние ФП

Page 32: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 33: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 34: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 35: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 36: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 37: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 38: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Page 39: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЯЗЫК ЛП PROLOG

• Особенности языка– Описание проблемы и правил ее решения– Нахождение всех возможных решений с

помощью механизма поиска с возвратом(backtracking)

– Простой синтаксис

Page 40: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ПЕРВАЯ ПРОГРАММА

• Факты– Воробей – это птица.

Воробей – родитель птенца.• Правило вывода

– Некто является птицей при условии, что у него есть родитель – птица.

• Программа– птица(воробей).– птица(X):– родитель(Y, X), птица

(Y).– родитель(воробей, птенец).

• Запрос– птица(Z)

• Все возможные решения:– Z = воробей– Z = птенец

Page 41: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ПЕРВАЯ ПРОГРАММА

• bird(sparrow).bird(X):– parent(Y, X), bird(Y).parent(sparrow, nestling).

• ? – bird(Z)Z = sparrowZ = nestling

Факт

Факт

Правило вывода

Запрос

Page 42: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ОСНОВНЫЕ СПОСОБЫ РЕШЕНИЯ

• Поиск с возвратом (backtracking)• Рекурсия Вход

Page 43: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ПОИСК С ВОЗВРАТОМ

• Для работы поиска с возвратом необходимо выполнение двух условий– Недоказательство некоторой цели– Возврат (откат) к цели, которую можно

передоказать

Page 44: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

РЕКУРСИЯ

• Нахождение значения факториала0! = 1n! = 1 * 2 * 3 * … * (n – 1) * n

• Рекурсивная формула для расчета факториала0! = 1n! = (n – 1)! * n

Page 45: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

РЕКУРСИЯ

• factorial (0, 1).factorial (N, RES) :- M = N – 1, factorial (M, TMP), RES = TMP * N.

• ? – factorial (3, RES) RES = 6

Page 46: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЯЗЫК ФП LISP

• Особенности языка– Одинаковая форма представления данных и

программ – в виде списка– Функциональный образ мышления– Не требуется явное описание типов данных,

используемых в программе– Основной способ решения – рекурсия

Page 47: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ПЕРВАЯ ПРОГРАММА

• > (+ 2 3)программаданные

• > (+ 2 3)5

• > ‘(+ 2 3)(+ 2 3)

• > (quote (+ 2 3))(+ 2 3)

Page 48: ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ОСНОВЫ LISP’А

Символьные выражения

Атомы

Символы

Числа

t nil Length=LengthT+1 2=1+1

Списки