Transcript ppt 2,2M

Ст. преподаватель каф. ВТ НГТУ
Юлия Вадимовна Новицкая
Email: [email protected]
Web: http://ermak.cs.nstu.ru/flp
ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ
ПРОГРАММИРОВАНИЕ
Направление 231000.62 – Программная инженерия, 7 семестр
ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ
ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
Направление 230100.62 – Информатика и ВТ, 7 семестр
ПРЕДМЕТ ИЗУЧЕНИЯ
• ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ
язык программирования Lisp
(LISt Processing)
• ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
язык программирования Prolog
(PROgramming in LOGic)
ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ
ПРОГРАММИРОВАНИЕ (ФЛП)
• Лекции – 34 часа
(17 лекций)
• Лабораторные работы (ЛР) – 17 часов
(4 лаб. работы)
• Расчетно-графическое задание (РГЗ)
(получение задания на 2-й лаб. работе)
• Экзамен
ФУНКЦИОНАЛЬНОЕ
ПРОГРАММИРОВАНИЕ (ФП)
• Лекции – 34 часа
(17 лекций)
• Лабораторные работы (ЛР) – 17 часов
(4 лаб. работы)
• Расчетно-графическое задание (РГЗ)
(получение задания на 2-й лаб. работе)
• Диф. зачет
ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ
(ЛП)
• Лекции – 17 часов
(8 лекций)
• Лабораторные работы (ЛР) – 17 часов
(4 лаб. работы)
• Расчетно-графическое задание (РГЗ)
(получение задания на 2-й лаб. работе)
• Диф. зачет
БАЛЛЬНО-РЕЙТИНГОВАЯ СИСТЕМА
ФЛП
• Дисциплина в целом – 100 баллов
– 60 баллов в семестре
– 40 баллов на экзамене
• Лабораторные работы с №1 по №4
– 6  12 баллов
• Расчетно-графическое задание
– 6  12 баллов
• Срок защиты ЛР без потери баллов – одна неделя
после лабораторной работы по расписанию
• Срок защиты РГЗ без потери баллов
– ФЛП – 17 неделя
БАЛЛЬНО-РЕЙТИНГОВАЯ СИСТЕМА
ФП и ЛП
• Дисциплина в целом – 100 баллов
– 80 баллов в семестре
– 20 баллов на зачете
• Лабораторные работы с №1 по №4
– 8  16 баллов
• Расчетно-графическое задание
– 8  16 баллов
• Срок защиты ЛР без потери баллов – одна неделя
после лабораторной работы по расписанию
• Срок защиты РГЗ без потери баллов
– ФП – 16 неделя, ЛП – 16 неделя
ОТЧЕТНОСТЬ
• Отчеты по лабораторным работам
представляются в электронном виде одним
файлом в конце семестра
• Отчет по расчетно-графическому заданию
представляется в распечатанном виде в
конце семестра
УЧЕБНЫЕ МАТЕРИАЛЫ
ИСТОЧНИКИ (ОСНОВНЫЕ)
• Адаменко А.Н., Кучуков А.М. Логическое программирование и Visual
Prolog. - СПб.: БХВ-Петербург, 2003. - 992 С.
• Братко И. Алгоритмы искусственного интеллекта на языке Prolog. – М.
: Вильямс , 2004. – 637 с.
• Городняя Л.В. Основы функционального программирования. – М. :
ИНТУИТ.РУ , 2004. – 272 с.
• Ин Ц., Соломон Д. Использование Турбо-Пролога. - М.: Мир, 1993. 608 С.
• Непейвода Н.Н. Стили и методы программирования. – М.: Интернетуниверситет информационных технологий, 2005. – 316 с.
ИСТОЧНИКИ (ОСНОВНЫЕ)
• Стерлинг Л., Шапиро Э. Искусство программирования на языке
Пролог. - М.: Мир, 1990. - 235 С.
• Хювёнен Э., Сеппянен Й. Мир Лиспа. М.: Мир, 1990. - 447 С.
• Цуканова Н.И., Дмитриева Т.А. Логическое программирование на
языке Visual Prolog. - М.: Горячая Линия - Телеком, 2008. - 144 С.
• Чанышев О.Г. ПРОграммирование в ЛОГике. – Омск : Изд-во ОмГУ ,
2004. – 63 с.
• Шрайнер П.А. Основы программирования на языке Пролог. Курс
лекций. - М.: Интернет-университет информационных технологий,
2005. - 176 С.
ИСТОЧНИКИ (ДОПОЛНИТЕЛЬНЫЕ)
• Доорс Дж., Рейблейн А.Р., Вадера С. Пролог язык программирования
будущего. - М.: ФиС, 1990. - 144 С.
• Клоксин У., Меллиш Д. Программирование на языке Пролог. - М.:
Мир, 1987. - 336 С.
• Маурер У. Введение в программирование на языке ЛИСП. - М.: Мир,
1978. - 104 С.
• Полещук Н., Лоскутов П. AutoLISP и Visual LISP в среде AutoCAD. - СПб.:
БХВ-Петербург, 2006. - 960 С.
• Стобо Дж. Язык программирования Пролог. - М.: Мир, 1993. - 368 С.
• Хендерсон П. Функциональное программирование: применение и
реализация. М.: Мир, 1983. - 349 С.
• Янсон А. Турбо-Пролог в сжатом изложении. - М.: Мир, 1991. - 94 С.
ИНТЕРНЕТ-РЕСУРСЫ
• Программирование на языке ПРОЛОГ [Электронный ресурс]. –
Электрон. дан. – USAM SRL, cop. 2009. – Режим доступа :
http://www.prolog.md
• Русскоязычное сообщество лисперов [Электронный ресурс]. –
Электрон. дан. – 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
• Amzi! inc. [Electronic resource]. – Electronic data. – Mode acess :
http://www.amzi.com
ИНТЕРНЕТ-РЕСУРСЫ
• 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
ПАРАДИГМА
• Парадигма – это система взглядов на
явления окружающего мира и
представлений о возможных
взаимодействиях с ними
• Парадигма программирования – система
идей и понятий, определяющих
фундаментальный стиль
программирования
ПАРАДИГМЫ
ПРОГРАММИРОВАНИЯ
• декларативная
– логическая
– функциональная
•
•
•
•
•
императивная
объектно-ориентированная
параллельная
процедурная
…
ПАРАДИГМЫ
ПРОГРАММИРОВАНИЯ
• Некоторый язык программирования не
обязательно использует только одну
парадигму, многие языки поддерживают
несколько парадигм
• Ни одна парадигма не может быть
одинаково эффективной для всех задач, и
программисту следует выбирать лучший
стиль программирования для решения
каждой отдельной задачи
КЛАССИФИКАЦИЯ
Языки
программирования
Алгоритмические
(процедурные) языки
(C, С++, Pascal,
Basic, …)
Декларативные
(неалгоритмические)
языки
Языки
логического
программирования
(Prolog, …)
Языки
функционального
программирования
(Lisp, Haskell, Erlang…)
ОТЛИЧИЯ
• Алгоритмический (процедурный) способ
программирования соответствует вопросу «как»
(необходимо описать, как решается задача),
декларативный способ – вопросу «что» (достаточно
описать, что должно быть решено)
• Программа на декларативном языке состоит из двух
компонент: условия задачи (которую иногда называют
«базой данных») и целевого запроса
• Для декларативного программирования необходимо
наличие «решателя» (называемого обычно
интерпретатором), который «знает» как выполнить
целевой запрос, исходя из условий, представленных в
«базе данных»
ОБЛАСТИ ПРИМЕНЕНИЯ
ДЕКЛАРАТИВНЫХ ЯЗЫКОВ
• Реализация обработки типов данных, имеющих рекурсивную
природу: списков, деревьев, графов и сводящихся к ним структур
• Такого рода задачи характерны для обработки символьной
информации, то есть для создания трансляторов и решения задач
искусственного интеллекта: обработки естественного языка,
трансформации и автоматического синтеза программ, аналитического
преобразования формальных текстов и др.
• Создание систем искусственного интеллекта
• Разработка экспертных систем и оболочек экспертных систем
• Создание систем помощи принятия решений
• Разработка систем обработки естественного языка
• Построение планов действий роботов
• …
Современное состояние ЛП
• Visual Prolog 7.5
• Разработкой языка занимается фирма PDC
Prolog Development Center
• http://www.pdc.dk
Современное состояние ФП
ЯЗЫК ЛП 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
Списки