Скачать презентацию Мова логічного програмування PROLOG Концепції мови PROLOG Скачать презентацию Мова логічного програмування PROLOG Концепції мови PROLOG

Prolog.Lecture.Part1.ppt

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

Мова логічного програмування PROLOG Мова логічного програмування PROLOG

Концепції мови PROLOG Речення: факти та правила Запити Змінні Пошук з поверненням Рекурсія 2 Концепції мови PROLOG Речення: факти та правила Запити Змінні Пошук з поверненням Рекурсія 2

Вступ Prolog – мова для символічних, нечислових обчислень Ця мова особливо гарно пристосована для Вступ Prolog – мова для символічних, нечислових обчислень Ця мова особливо гарно пристосована для розв’язання проблем, що стосуються об’єктів та відношень між об’єктами: реалізація експертних систем та оболонок експертних систем; створення пакетів символьних обчислень; доказ теорем; інтелектуальні системи 3

Близькість до природних мов Asm АМ ФП ЛП ПМ Asm – асемблер АМ – Близькість до природних мов Asm АМ ФП ЛП ПМ Asm – асемблер АМ – алгоритмічні мови ФП – мови функціонального програмування ЛП – мови логічного програмування ПМ – природні мови 4

Класифікація мов програмування Мови програмування Алгоритмічні (процедурні) мови (Fortran, Pascal, C, …) Декларативні (неалгоритмічні) Класифікація мов програмування Мови програмування Алгоритмічні (процедурні) мови (Fortran, Pascal, C, …) Декларативні (неалгоритмічні) мови Мови функціонального програмування (Lisp, …) Мови логічного програмування (Prolog, …) 5

Концепція мови PROLOG Prolog є декларативною мовою програмування, що забезпечує розв'язання задач, що виражені Концепція мови PROLOG Prolog є декларативною мовою програмування, що забезпечує розв'язання задач, що виражені в термінах об'єктів та відношень між ними В Prolog відсутні оператори присвоювання, розгалуження, циклів, безумовних переходів та вказівники, тобто відсутні будь-які дії 6

Програмування на мові PROLOG Програма мовою PROLOG складається з наступних компонент: Набору фактів про Програмування на мові PROLOG Програма мовою PROLOG складається з наступних компонент: Набору фактів про об'єкти та відношень між ними; Множини правил про об'єкти та відношень між ними; Єдине питання про об'єкти та відношення між ними 7

Факти Факт розуміється як запис того відношення, значення якого істинне Форма запису факту: ім'я_предикату(аргумент Факти Факт розуміється як запис того відношення, значення якого істинне Форма запису факту: ім'я_предикату(аргумент {, аргумент}). В термінології Prolog будь-яка сукупність фактів (і правил) називається базою даних 8

Правила записування фактів Всі назви предикатів та аргументів повинні починатись з малої латинської літери Правила записування фактів Всі назви предикатів та аргументів повинні починатись з малої латинської літери Перерахування аргументів – через кому Кожний факт повинен закінчуватися крапкою Кількість аргументів та вид відношень (напрямки відношень) визначаються програмістом та не змінюються при виконанні програми 9

Приклади фактів likes(ivan, programming). ; Іван захоплюється програмуванням likes(programming, ivan). ; Програмування захоплюється Іваном Приклади фактів likes(ivan, programming). ; Іван захоплюється програмуванням likes(programming, ivan). ; Програмування захоплюється Іваном 10

Правила запису фактів в Visual. Prolog Тип відношень описується в розділі predicates : likes(symbol, Правила запису фактів в Visual. Prolog Тип відношень описується в розділі predicates : likes(symbol, symbol) При описуванні фактів та правил в розділі clauses предикати повинні бути згруповані : clauses likes(ivan, programming). likes(ivan, reading). likes(mary, reading). 11

Питання (запити) Для того, щоб програма, що написана на мові Prolog, почала роботу, до Питання (запити) Для того, щоб програма, що написана на мові Prolog, почала роботу, до неї потрібно звернутися з питанням (запитом) Для формулювання питання в програмі на Visual. Prolog існує розділ goal likes(ivan, mary). Звернення до Prolog’у з питанням ініціює процедуру пошуку в базі даних, що була введена програмістом раніше 12

Формування відповіді на питання Prolog продивляється БД в пошуках предикату, що відповідає питанню Предикати Формування відповіді на питання Prolog продивляється БД в пошуках предикату, що відповідає питанню Предикати вважаються співпадаючими, якщо вони співпадають посимвольно та їх відповідні аргументи попарно співпадають Якщо предикат питання співпадає з предикатом одного з фактів в БД, то питання узгоджується з БД При цьому відповіддю на питання буде або Yes, або No 13

Змінні Під змінною в мові Prolog розуміється будь-яка назва, що починається з великої латинської Змінні Під змінною в мові Prolog розуміється будь-яка назва, що починається з великої латинської літери Приклади: Who, What, Ivan На відміну від процедурних мов, де назва змінної пов'язується з областю пам'яті, змінна в Prolog визначає об'єкт, значення якого може бути знайдене 14

Змінні Змінна називається конкретизованою, якщо існує об'єкт, який вона визначає Якщо не відомо, що Змінні Змінна називається конкретизованою, якщо існує об'єкт, який вона визначає Якщо не відомо, що саме визначає змінна, то вважається, що змінна не конкретизована 15

Використання змінних в питаннях В питаннях змінні використовуються для того, щоб знайти якийсь об'єкт Використання змінних в питаннях В питаннях змінні використовуються для того, щоб знайти якийсь об'єкт Наприклад: likes(ivan, X) – відповіддю буде : X = programming X = reading 2 solutions Yes При співставленні факту та питання, що містить змінну, змінна отримує значення 16

Використання змінних в питаннях Якщо змінна визначає об'єкт, який не має значення в контексті, Використання змінних в питаннях Якщо змінна визначає об'єкт, який не має значення в контексті, що розглядається, то використовується анонімна змінна В Visual. Prolog анонімні змінні позначаються символом “_” Наприклад: likes(ivan, _) – відповіддю буде : Yes 17

Складні питання та пошук з поверненням В складних питаннях, що мають операцію кон'юнкції, повинні Складні питання та пошук з поверненням В складних питаннях, що мають операцію кон'юнкції, повинні бути доведені все підцілі! Спочатку Prolog намагається довести першу підціль Якщо в базі даних є факт, що відповідає першій підцілі, то Prolog позначає знайдене місце (приписує маркер) та пробує узгодити наступні цілі 18

Складні питання та пошук з поверненням Після узгодження (або не узгодження) наступних підцілей, Prolog Складні питання та пошук з поверненням Після узгодження (або не узгодження) наступних підцілей, Prolog знову повертається до першої підцілі та починає її узгодження з приписаного маркеру Цей процес отримав назву пошуку з поверненням (backtracking) 19

Приклад складного питання та пошуку з поверненням Дізнаємося, чи мають Іван та Марія спільні Приклад складного питання та пошуку з поверненням Дізнаємося, чи мають Іван та Марія спільні інтереси? goal likes(ivan, X), likes(mary, X). Спочатку узгодимо likes(ivan, X). Змінна Х конкретизується за БД так: X=programming Тепер спробуємо узгодити likes(mary, programming). Цей факт відсутній в БД. Тому Prolog автоматично розконкретизує змінну Х. 20

Приклад складного питання та пошуку з поверненням Далі Prolog спробує узгодити твердження likes(ivan, reading), Приклад складного питання та пошуку з поверненням Далі Prolog спробує узгодити твердження likes(ivan, reading), likes(mary, reading). Обидва факти, що входять у вираз, присутні у БД Інших альтернатив для likes(ivan, X) немає і в якості результату запиту буде видано наступне: X=reading 1 Solution Yes. 21

Правила Мови типу Prolog – мови типу “якщо-то”. Висновок вірний, якщо вірні всі умови, Правила Мови типу Prolog – мови типу “якщо-то”. Висновок вірний, якщо вірні всі умови, що перераховані в правій частині Наприклад: % Х та У мають спільні інтереси common_likes(X, Y): likes(X, Z), likes(Y, Z), X<>Y. 22

Узгодження твердження при наявності правил З'ясуємо, чи мають Іван та Марія спільні інтереси goal Узгодження твердження при наявності правил З'ясуємо, чи мають Іван та Марія спільні інтереси goal common_likes(ivan, mary). Спочатку Prolog спробує знайти в БД факт common_likes(ivan, mary) Такий факт є відсутнім в БД, але є правило, розглянуте вище. Prolog відмічає це місце в БД. При цьому змінна Х конкретизується значенням ivan, У – значенням mary. 23

Узгодження твердження при наявності правил Далі Prolog шукає відповідність для предиката likes(ivan, Z). Факт, Узгодження твердження при наявності правил Далі Prolog шукає відповідність для предиката likes(ivan, Z). Факт, з яким відбувається зіставлення, є likes(ivan, programming) – тим самим перша ціль досягнута Prolog позначає маркером відповідне місце в БД та записує, що змінна Z має значення programming 24

Узгодження твердження при наявності правил Далі Prolog намагається знайти відповідність для наступного предиката в Узгодження твердження при наявності правил Далі Prolog намагається знайти відповідність для наступного предиката в правилі, для чого шукає в БД факт likes(mary, programming). Так як такого правила в БД немає, змінна Z розконкретизовується! Тепер Prolog продовжує пошук відповідності для предиката likes(ivan, Z), починаючи від першого зверху твердження (з місця знаходження маркеру) та знаходить факт likes(ivan, reading), Z відповідно буде мати значення reading 25

Узгодження твердження при наявності правил Твердження likes(mary, reading) успішно узгоджується з БД Остання ціль Узгодження твердження при наявності правил Твердження likes(mary, reading) успішно узгоджується з БД Остання ціль в кон'юнкції також успішно досягається і тим сам доводиться, що факт likes(ivan, mary) є істинним, Prolog відповідає Yes. 26

Рекурсія як основний метод програмування на Prolog В загальному вигляді рекурсивне правило має наступний Рекурсія як основний метод програмування на Prolog В загальному вигляді рекурсивне правило має наступний вигляд : recursive_rule(<фактичні параметри через кому>): <предикати та правила>, recursive_rule(<фактичні параметри рекурс. виклику>). Для передачі значень між правилами використовується стек Кожний раз при рекурсивному виклиці нові копії значень, що використовуються, поміщаються в стек 27

Правила побудови рекурсивних процедур Потрібно задати аргумент рекурсивного виклику, що змінюється. При цьому положення Правила побудови рекурсивних процедур Потрібно задати аргумент рекурсивного виклику, що змінюється. При цьому положення рекурсивного виклику в тілі правила може бути любим Потрібно також задати факт, що забезпечує завершення рекурсії. Такий факт повинен знаходитися перед правилом, а не після з метою уникнення лівосторонньої рекурсії 28

Лівостороння рекурсія Виникає в випадку, коли правило породжує підціль, що є еквівалентною вихідній цілі, Лівостороння рекурсія Виникає в випадку, коли правило породжує підціль, що є еквівалентною вихідній цілі, яка є причиною використання цього правила В процедурі з лівою рекурсією рекурсивна підціль знаходиться зліва від інших підцілей Наприклад: dog(X): -dog(Y), parent(Y, X). dog(reks). 29

Лівостороння рекурсія При спробі узгодити цільове твердження dog(X) Prolog спочатку спробує використати правило та Лівостороння рекурсія При спробі узгодити цільове твердження dog(X) Prolog спочатку спробує використати правило та рекурсивно породить підціль dog(Y). Спроба знайти відповідність цій цілі знову приводить до вибору першого правила і так далі Причина зациклювання – відсутність можливості використання механізму повернення Для того, щоб почалось повернення, Prolog повинен потерпіти невдачу, а цього в наведеному прикладі не відбувається 30

Приклад використання рекурсії Обчислення факторіалу fact(0, 1). fact(N, M): N 1=N-1, fact(N 1, M Приклад використання рекурсії Обчислення факторіалу fact(0, 1). fact(N, M): N 1=N-1, fact(N 1, M 1), M=N*M 1. Розглянемо роботу правила для обчислення 4! 31

Етапи обчислення факторіалу 32 Етапи обчислення факторіалу 32

Декларативне трактування Prolog-програм Декларативне значення програм дозволяє встановити, чи є задана ціль істинною, і Декларативне трактування Prolog-програм Декларативне значення програм дозволяє встановити, чи є задана ціль істинною, і у випадку позитивної відповіді – при яких значеннях змінних вона є істинною Ніяких кроків в програмі не виконується 33

Декларативне трактування Prolog-програм Для доведення істинності цілі достатньо правильно сформулювати всі факти та правила. Декларативне трактування Prolog-програм Для доведення істинності цілі достатньо правильно сформулювати всі факти та правила. При цьому порядок правил та фактів не важливий, як і не важливий порядок цілей в правилах Пролог автоматично, без участі користувача, доводить істинність цілей. При цьому немає необхідності навіть знати, як працює механізм виведення 34