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

advertisement
Ст. преподаватель каф. ВТ НГТУ
Юлия Вадимовна Новицкая
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
Download