06900ce7461834e2ef01225ca4505f40.ppt
- Количество слайдов: 37
ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ Ст. преп. каф. ВТ Юлия Вадимовна Новицкая novitskaya@corp. nstu. ru http: //ermak. cs. nstu. ru/logprog
Предмет изучения • Логическое программирование – декларативная парадигма • Язык логического программирования Prolog (PROgramming in LOGic)
Учебный график • В летнюю сессию – Установочная лекция – 2 часа • В течение семестра – Контрольная работа (основы, поиск с возвратом) • В зимнюю сессию – Лекции – 4 часа – Две лабораторные работы – 8 часов • Рекурсия. Списки. • Деревья. • Диф. зачет
Балльно-рейтинговая система • Дисциплина – всего 100 баллов – В семестре – 20 баллов (контрольная работа – 20 баллов) срок сдачи – до начала сессии, во время сессии – 10 баллов – В сессию – 40 баллов (лаб. работы №№ 1, 2 – по 20 баллов) срок сдачи – сессия, после сессии – по 10 баллов – Диф. зачет – 40 баллов (один теоретический вопрос и один практический вопрос или тестирование)
Эпиграф
Эпиграф
Эпиграф
ЯЗЫК ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ PROLOG
Парадигмы программирования • Парадигма программирования – система идей и понятий, определяющих фундаментальный стиль программирования • Парадигмы программирования: – декларативная • логическая • функциональная – императивная – объектно-ориентированная – параллельная –…
Парадигмы программирования • Некоторый язык программирования не обязательно использует только одну парадигму, многие языки поддерживают несколько парадигм, являясь мультипарадигменными • Ни одна парадигма не может быть одинаково эффективной для всех задач, и программисту следует выбирать лучший стиль программирования для решения каждой отдельной задачи
Классификация Языки программирования Алгоритмические (процедурные) языки (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) – Простой синтаксис
ПЕРВАЯ ПРОГРАММА • Факты – Воробей – это птица. Воробей – родитель птенца. • Правило вывода – Некто является птицей при условии, что у него есть родитель – птица. • Запрос – птица(Z) • Все возможные решения: • Программа – птица(воробей). – птица(X): – родитель(Y, X), птица (Y). – родитель(воробей, птенец). – 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 is N – 1, factorial (M, TMP), RES is TMP * N. • ? – factorial (3, RES) RES = 6