Ст. преподаватель каф. ВТ НГТУ Юлия Вадимовна Новицкая Email: novitskaya@corp.nstu.ru Web: http://ermak.cs.nstu.ru/flp ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ Направление 231000.62 – Программная инженерия 7 семестр ПРЕДМЕТ ИЗУЧЕНИЯ • ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ язык программирования Prolog (PROgramming in LOGic) • ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ язык программирования Lisp (LISt Processing) ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ • • • • Продолжительность семестра – 19 недель Лекции – 9 лекций Лабораторные работы – 4 лаб. работы Расчетно-графическое задание (РГЗ) (получение задания на 2-й лаб. работе) • Диф. зачет БАЛЛЬНО-РЕЙТИНГОВАЯ СИСТЕМА • Дисциплина в целом – 100 баллов – 80 баллов в семестре – 20 баллов на зачете • Лабораторные работы с №1 по №4 – 8 16 баллов • Расчетно-графическое задание – 8 16 баллов • Срок защиты ЛР без потери баллов – одна неделя после лабораторной работы по расписанию • Срок защиты РГЗ без потери баллов – 17 неделя ОТЧЕТНОСТЬ • Отчеты по лабораторным работам представляются в электронном виде одним файлом в конце семестра • Отчет по расчетно-графическому заданию представляется в распечатанном виде на защите РГЗ УЧЕБНЫЕ МАТЕРИАЛЫ ИСТОЧНИКИ (ОСНОВНЫЕ) • Адаменко А.Н., Кучуков А.М. Логическое программирование и Visual Prolog. - СПб.: БХВ-Петербург, 2003. - 992 С. • Братко И. Алгоритмы искусственного интеллекта на языке Prolog. – М. : Вильямс , 2004. – 637 с. • Ин Ц., Соломон Д. Использование Турбо-Пролога. - М.: Мир, 1993. 608 С. • Непейвода Н.Н. Стили и методы программирования. – М.: Интернетуниверситет информационных технологий, 2005. – 316 с. ИСТОЧНИКИ (ОСНОВНЫЕ) • Стерлинг Л., Шапиро Э. Искусство программирования на языке Пролог. - М.: Мир, 1990. - 235 С. • Цуканова Н.И., Дмитриева Т.А. Логическое программирование на языке Visual Prolog. - М.: Горячая Линия - Телеком, 2008. - 144 С. • Чанышев О.Г. ПРОграммирование в ЛОГике. – Омск : Изд-во ОмГУ , 2004. – 63 с. • Шрайнер П.А. Основы программирования на языке Пролог. Курс лекций. - М.: Интернет-университет информационных технологий, 2005. - 176 С. • Хювёнен Э., Сеппянен Й. Мир Лиспа. М.: Мир, 1990. - 447 С. • Городняя Л.В. Основы функционального программирования. – М. : ИНТУИТ.РУ , 2004. – 272 с. ИСТОЧНИКИ (ДОПОЛНИТЕЛЬНЫЕ) • Доорс Дж., Рейблейн А.Р., Вадера С. Пролог язык программирования будущего. - М.: ФиС, 1990. - 144 С. • Клоксин У., Меллиш Д. Программирование на языке Пролог. - М.: Мир, 1987. - 336 С. • Стобо Дж. Язык программирования Пролог. - М.: Мир, 1993. - 368 С. • Янсон А. Турбо-Пролог в сжатом изложении. - М.: Мир, 1991. - 94 С. • Маурер У. Введение в программирование на языке ЛИСП. - М.: Мир, 1978. - 104 С. • Полещук Н., Лоскутов П. AutoLISP и Visual LISP в среде AutoCAD. - СПб.: БХВ-Петербург, 2006. - 960 С. • Хендерсон П. Функциональное программирование: применение и реализация. М.: Мир, 1983. - 349 С. ИНТЕРНЕТ-РЕСУРСЫ • SWI-Prolog [Electronic resource]. – Electronic data. – Mode access : http://www.swi-prolog.org • Prolog Development Center [Electronic resource]. – Electronic data. – Copenhagen, cop. 1983-2011. – Mode access : http://www.pdc.dk • Visual Prolog [Electronic resource]. – Electronic data. – Mode access : http://www.visual-prolog.com • Amzi! inc. [Electronic resource]. – Electronic data. – Mode access : http://www.amzi.com • Хабаров С.П. Интеллектуальные информационные системы. PROLOGязык разработки интеллектуальных и экспертных систем: учебное пособие / С.П.Хабаров.- СПб. СПбГЛТУ, 2013.- 138 с. http://www.habarov.spb.ru/book_prolog_2013/SerpBook_Prolog.pdf ИНТЕРНЕТ-РЕСУРСЫ • Русскоязычное сообщество лисперов [Электронный ресурс]. – Электрон. дан. – Lisp.ru, cop. 2008-2010. – Режим доступа : http://lisp.ru • Lisper.ru [Электронный ресурс]. – Электрон. дан. – lisper.ru, cop. 20092010. – Режим доступа : http://lisper.ru • Home Lisp [Электронный ресурс]. – Электрон. дан. – Режим доступа : http://homelisp.ru • XLISP Home Page [Electronic resource]. – Electronic data. – Mode acess : http://xlisp.org • 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 ПАРАДИГМА • Парадигма – это система взглядов на явления окружающего мира и представлений о возможных взаимодействиях с ними • Парадигма программирования – система идей и понятий, определяющих фундаментальный стиль программирования ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ • декларативная – логическая – функциональная • • • • • императивная объектно-ориентированная параллельная процедурная … ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ • Некоторый язык программирования не обязательно использует только одну парадигму, многие языки поддерживают несколько парадигм, являясь мультипарадигменными • Ни одна парадигма не может быть одинаково эффективной для всех задач, и программисту следует выбирать лучший стиль программирования для решения каждой отдельной задачи КЛАССИФИКАЦИЯ Языки программирования Алгоритмические (процедурные) языки (C, С++, Pascal, Basic, …) Декларативные (неалгоритмические) языки Языки логического программирования (Prolog, …) Языки функционального программирования (Lisp, Haskell, Erlang…) ОТЛИЧИЯ • Алгоритмический (процедурный) способ программирования соответствует вопросу «как» (необходимо описать, как решается задача), декларативный способ – вопросу «что» (достаточно описать, что должно быть решено) • Программа на декларативном языке состоит из двух компонент: условия задачи (которую иногда называют «базой данных») и целевого запроса • Для декларативного программирования необходимо наличие «решателя» (называемого обычно интерпретатором), который «знает», как выполнить целевой запрос, исходя из условий, представленных в «базе данных» ОБЛАСТИ ПРИМЕНЕНИЯ ДЕКЛАРАТИВНЫХ ЯЗЫКОВ • Реализация обработки типов данных, имеющих рекурсивную природу: списков, деревьев, графов и сводящихся к ним структур • Такого рода задачи характерны для обработки символьной информации, то есть для создания трансляторов и решения задач искусственного интеллекта: обработки естественного языка, трансформации и автоматического синтеза программ, аналитического преобразования формальных текстов и др. • Создание систем искусственного интеллекта • Разработка экспертных систем и оболочек экспертных систем • Создание систем помощи принятия решений • Разработка систем обработки естественного языка • Построение планов действий роботов • … Современное состояние ЛП • Visual Prolog • Разработкой занимается фирма Prolog Development Center (PDC) • http://www.pdc.dk Современное состояние ЛП • SICStus Prolog • Разработкой занимается исследовательский институт Swedish Institute оf Computer Science (SICT) • http://www.sics.se Современное состояние ЛП • SWI Prolog • Разработкой занимаются в University of Amsterdam • http://www.swi-prolog.org Современное состояние ЛП • Amzi! Prolog • http://amzi.com Современное состояние ФП ОСНОВЫ ЯЗЫК PROLOG • Особенности языка – Описание проблемы и правил ее решения – Нахождение всех возможных решений с помощью механизма поиска с возвратом (backtracking) – Простой синтаксис ПЕРВАЯ ПРОГРАММА • Факты – Воробей – это птица. Воробей – родитель птенца. • Правило вывода – Некто является птицей при условии, что у него есть родитель – птица. • Программа – птица(воробей). – птица(X):– родитель(Y, X), птица (Y). – родитель(воробей, птенец). • Запрос – птица(Z) • Все возможные решения: – Z = воробей – Z = птенец ПЕРВАЯ ПРОГРАММА Факт • bird(sparrow). bird(X):– parent(Y, X), bird(Y). parent(sparrow, nestling). Правило вывода Факт • ? – bird(Z) Z = sparrow Z = nestling Запрос ОСНОВНЫЕ СПОСОБЫ РЕШЕНИЯ • Поиск с возвратом (backtracking) • Рекурсия Вход ПОИСК С ВОЗВРАТОМ • Для работы поиска с возвратом необходимо выполнение двух условий – Недоказательство некоторой цели – Возврат (откат) к цели, которую можно передоказать РЕКУРСИЯ • Нахождение значения факториала 0! = 1 n! = 1 * 2 * 3 * … * (n – 1) * n • Рекурсивная формула для расчета факториала 0! = 1 n! = (n – 1)! * n РЕКУРСИЯ • factorial (0, 1). factorial (N, RES) :- M = N – 1, factorial (M, TMP), RES = TMP * N. • ? – factorial (3, RES) RES = 6 ЯЗЫК ФП LISP • Особенности языка – Одинаковая форма представления данных и программ – в виде списка – Функциональный образ мышления – Не требуется явное описание типов данных, используемых в программе – Основной способ решения – рекурсия ПЕРВАЯ ПРОГРАММА • > (+ 2 3) программа данные • > (+ 2 3) 5 • > ‘(+ 2 3) (+ 2 3) • > (quote (+ 2 3)) (+ 2 3) ОСНОВЫ LISP’А Символьные выражения Символы Атомы Числа t nil Length=Le ngthT+1 2=1+1 Списки РЕКУРСИЯ • factorial (0, 1). factorial (N, RES) :- M = N – 1, factorial (M, TMP), RES = TMP * N. • ? – factorial (3, RES) RES = 6 • (defun factorial (n) (cond ((= n 0) 1) (t (* (factorial (– n 1) n))))) • (factorial 3) 6