Скачать презентацию Старший преподаватель каф ВТ Юлия Вадимовна Новицкая email Скачать презентацию Старший преподаватель каф ВТ Юлия Вадимовна Новицкая email

flp2cd_intr.ppt

  • Количество слайдов: 41

Старший преподаватель каф. ВТ Юлия Вадимовна Новицкая email: novitskaya@vt. cs. nstu. ru Установочная лекция Старший преподаватель каф. ВТ Юлия Вадимовна Новицкая email: novitskaya@vt. cs. nstu. ru Установочная лекция по дисциплине «ФУНКЦИОНАЛЬНОЕ И ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ»

ПРЕДМЕТ ИЗУЧЕНИЯ Логическое программирование язык программирования Prolog (Programming in logic) Функциональное программирование язык программирования ПРЕДМЕТ ИЗУЧЕНИЯ Логическое программирование язык программирования Prolog (Programming in logic) Функциональное программирование язык программирования Lisp (List processing)

СОДЕРЖАНИЕ ДИСЦИПЛИНЫ В зимнюю сессию В течение семестра установочная лекция – 2 часа Контрольная СОДЕРЖАНИЕ ДИСЦИПЛИНЫ В зимнюю сессию В течение семестра установочная лекция – 2 часа Контрольная работа, состоящая из трех частей (Prolog) В летнюю сессию Лекции – 6 часов Два практических занятия (Prolog) – 4 часа Одно практическое занятие (Lisp) – 2 часа Экзамен Два теоретических вопроса Одна практическая задача

МАТЕРИАЛЫ ПО ДИСЦИПЛИНЕ http: //ermak. cs. nstu. ru/flp МАТЕРИАЛЫ ПО ДИСЦИПЛИНЕ http: //ermak. cs. nstu. ru/flp

ПОЛНЫЙ КОМПЛЕКТ МАТЕРИАЛОВ Состав комплекта (архив 1, 44 Mб) Рабочая программа (описание дисциплины, часы, ПОЛНЫЙ КОМПЛЕКТ МАТЕРИАЛОВ Состав комплекта (архив 1, 44 Mб) Рабочая программа (описание дисциплины, часы, экзаменационные вопросы, примеры экзаменационных задач, список литературы, описание балльно-рейтинговой системы) Задания для контрольной работы Задания для практических занятий Дистрибутив Prolog’а Дистрибутив Lisp’а Учебное пособие

КЛАССИФИКАЦИЯ Языки программирования Алгоритмические (процедурные) языки (Fortran, Pascal, C, …) Декларативные (неалгоритмические) языки Языки КЛАССИФИКАЦИЯ Языки программирования Алгоритмические (процедурные) языки (Fortran, Pascal, C, …) Декларативные (неалгоритмические) языки Языки логического программирования (Prolog, …) Языки функционального программирования (Lisp, …)

ОБЛАСТИ ПРИМЕНЕНИЯ Области применения декларативных языков Создание систем искусственного интеллекта Разработка экспертных систем и ОБЛАСТИ ПРИМЕНЕНИЯ Области применения декларативных языков Создание систем искусственного интеллекта Разработка экспертных систем и оболочек экспертных систем Создание систем помощи принятия решений Разработка систем обработки естественного языка Построение планов действий роботов …

СОВРЕМЕННОЕ СОСТОЯНИЕ Visual Prolog 7. 2 Разработкой языка занимается фирма PDC Prolog Development Center СОВРЕМЕННОЕ СОСТОЯНИЕ Visual Prolog 7. 2 Разработкой языка занимается фирма PDC Prolog Development Center http: //www. pdc. dk Версии Prolog’а Turbo Prolog PDC Prolog Visual Prolog

СОВРЕМЕННОЕ СОСТОЯНИЕ http: //www. lisp. org Различные диалекты Lisp’а СОВРЕМЕННОЕ СОСТОЯНИЕ http: //www. lisp. org Различные диалекты Lisp’а

ЯЗЫК ПРОГРАММИРОВАНИЯ PROLOG Особенности Описание языка проблемы и правил ее решения Нахождение всех возможных ЯЗЫК ПРОГРАММИРОВАНИЯ PROLOG Особенности Описание языка проблемы и правил ее решения Нахождение всех возможных решений с помощью механизма поиска с возвратом (backtracking) Простой синтаксис

ПЕРВАЯ ПРОГРАММА Факты Правило вывода Воробей – это птица. Воробей – родитель птенца. Некто ПЕРВАЯ ПРОГРАММА Факты Правило вывода Воробей – это птица. Воробей – родитель птенца. Некто является птицей при условии, что у него есть родитель – птица. Программа птица (воробей). птица (X): – родитель (Y, X), птица (Y). родитель (воробей, птенец). Запрос птица (Z) Все возможные решения: Z = воробей Z = птенец

ПЕРВАЯ ПРОГРАММА PREDICATES bird (symbol) parent (symbol, symbol) CLAUSES Факт bird ( «воробей» ). ПЕРВАЯ ПРОГРАММА PREDICATES bird (symbol) parent (symbol, symbol) CLAUSES Факт bird ( «воробей» ). bird (X): – parent (Y, X), bird (Y). parent ( «воробей» , «птенец» ). Факт Правило вывода Goal: bird (Z) Z = «воробей» Z = «птенец» Внешняя цель

ПЕРВАЯ ПРОГРАММА PREDICATES bird (symbol) parent (symbol, symbol) CLAUSES bird (sparrow). bird (X) : ПЕРВАЯ ПРОГРАММА PREDICATES bird (symbol) parent (symbol, symbol) CLAUSES bird (sparrow). bird (X) : - parent (Y, X), bird (Y). parent (sparrow, nestling). Goal: bird (Z) Z = sparrow Z = nestling

ОСНОВНЫЕ СПОСОБЫ РЕШЕНИЯ Поиск с возвратом (backtracking) Рекурсия Вход ОСНОВНЫЕ СПОСОБЫ РЕШЕНИЯ Поиск с возвратом (backtracking) Рекурсия Вход

ПОИСК С ВОЗВРАТОМ Для работы поиска с возвратом необходимо выполнение двух условий Недоказательство некоторой ПОИСК С ВОЗВРАТОМ Для работы поиска с возвратом необходимо выполнение двух условий Недоказательство некоторой цели Возврат (откат) к цели, которую можно передоказать

ПОИСК С ВОЗВРАТОМ PREDICATES РЕШЕНИЕ tens (string) Двадцать два ones (string) start Двадцать три ПОИСК С ВОЗВРАТОМ PREDICATES РЕШЕНИЕ tens (string) Двадцать два ones (string) start Двадцать три Тридцать два CLAUSES tens ( «Двадцать» ). Тридцать три tens ( «Тридцать» ). ones ( «два» ). ones ( «три» ). start : - tens (X), ones (Y), write (X, « » , Y), nl, fail. GOAL start.

РЕКУРСИЯ Нахождение значения факториала n! = 1 * 2 * 3 * … * РЕКУРСИЯ Нахождение значения факториала n! = 1 * 2 * 3 * … * (n – 1) * n 0! = 1 Рекурсивная формула для расчета факториала n! = (n – 1)! * n

РЕКУРСИЯ PREDICATES factorial (integer, real) CLAUSES factorial (0, 1). factorial (N, Fact. N) : РЕКУРСИЯ PREDICATES factorial (integer, real) CLAUSES factorial (0, 1). factorial (N, Fact. N) : - M = N – 1, factorial (M, Fact. M), Fact. N = Fact. M*N. GOAL factorial (3, Fact. N), write ( «Fact. N=» , Fact. N).

ДЕРЕВО ЦЕЛЕЙ ДЕРЕВО ЦЕЛЕЙ

РЕКУРСИВНЫЕ ТИПЫ ДАННЫХ Списки [1, 2, 3] Деревья (бинарные, упорядоченные) РЕКУРСИВНЫЕ ТИПЫ ДАННЫХ Списки [1, 2, 3] Деревья (бинарные, упорядоченные)

ЯЗЫК ПРОГРАММИРОВАНИЯ LISP Особенности Одинаковая языка форма представления данных и программ – в виде ЯЗЫК ПРОГРАММИРОВАНИЯ LISP Особенности Одинаковая языка форма представления данных и программ – в виде списка Функциональный образ мышления Не требуется явное описание типов данных, используемых в программе Основной способ решения - рекурсия

ПЕРВАЯ ПРОГРАММА > (+ 2 3) программа данные > (+ 2 3) 5 > ПЕРВАЯ ПРОГРАММА > (+ 2 3) программа данные > (+ 2 3) 5 > ‘(+ 2 3) > (quote (+ 2 3)) (+ 2 3)

ОСНОВЫ LISP’А ОСНОВЫ LISP’А

СПИСКИ (2 a 5 str 2. 5 34) Голова списка – первый элемент списка СПИСКИ (2 a 5 str 2. 5 34) Голова списка – первый элемент списка 2 Хвост списка – все оставшиеся элементы списка, в свою очередь являющиеся самостоятельным списком (a 5 str 2. 5 34) Пустой список – ( ) или nil

БАЗОВЫЕ ФУНКЦИИ > (car ‘(1 2 3) ; получение головы списка 1 > (cdr БАЗОВЫЕ ФУНКЦИИ > (car ‘(1 2 3) ; получение головы списка 1 > (cdr ‘(1 2 3)) ; получение хвоста списка (2 3) > (cons 1 ‘(2 3)) ; создание списка (1 2 3) > (atom ‘(1 2 3)) ; проверка на атом NIL > (equal ‘(1 2 3)) ; проверка равенства T

РЕКУРСИЯ > (defun factorial (n) (cond ((= n 0) 1) (t (* (factorial (– РЕКУРСИЯ > (defun factorial (n) (cond ((= n 0) 1) (t (* (factorial (– n 1)) n)) ) ) FACTORIAL >(factorial 3) 6