Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Арифметика в Пролог



Арифметичні операції здійснюються за допомогою спеціальних вбудованих предикатів. У системі Пролог-Д для виконання арифметичних дій передбачений один вбудований арифметичний предикат:

УМНОЖЕНИЕ(Арг1,Арг2,АргЗ,Арг4).

Даний предикат передбачає реалізацію такої формули: Арг1*Арг2+АргЗ=Арг4. Предикат передбачає оборотність аргументів і реалізує арифметичні операції в області цілих чисел. Також за допомогою даного предиката можна описати будь-які арифметичні операції:

СЛОЖЕНИЕ(Х,У,Z)<-УМНОЖЕНИЕ(1,Х,У,Z);

ВЫЧИТАНИЕ(Х,У,Z)<-УМНОЖЕНИЕ(1,Х,Z,У);

УМНОЖЕНИЕ(Х,У,Z)<-УМНОЖЕНИЕ(Х,У,0,Z);

ДЕЛЕНИЕ(Х,У,Z)<-УМНОЖЕНИЕ(У,Z,0,Х);

Поряд з арифметичним предикатом існують два предикати БОЛЬШЕ й НЕ. Вбудований предикат БОЛЬШЕ(Арг1,Арг2) призначений для порівняння двох цілих чисел або змінних. Він має два аргументи: цілих або змінних, конкретизованих цілими. Обидва аргументи до моменту виконання повинні бути визначені. Якщо ці вимоги не виконані, то з'явиться повідомлення про помилку: "Функція не може бути виконана.". Предикат виконаний, якщо Арг1 > Арг2, інакше - не виконаний. Незважаючи на те, що предикат БОЛЬШЕ один, його достатньо для опису всіх можливих предикатів для порівняння числової інформації: дорівнює - РАВНО; менше -МЕНЬШЕ; менше і дорівнює - МИР і так далі. Це показує база знань, наведена нижче:

РАВНО(Х,Х);

МЕНЬШЕ(Х,У)<-БОЛЬШЕ(У,Х);

МИР(Х,У)<-НЕ(БОЛЬШЕ(Х,У));

В останньому реченні використаний вбудований предикат НЕ, його синтаксис: НЕ(Арг1);

Цей вбудований предикат має один аргумент, він обов'язково повинен бути предикатом. Предикат НЕ виконаний тоді й тільки тоді, коли предикат-аргумент не виконаний.

36. Вбудовані предикати в Пролог

У системі Пролог-Д використав. такі предикати:

УМНОЖЕНИЕ (Арг1,Арг2,АргЗ,Арг4). Даний предикат передбачає реалізацію такої формули:Арг1*Арг2+АргЗ= Арг4.Також за допомогою даного предиката можна описати будь-які арифметичні операції:

СЛОЖЕНИЕ(Х,У,Z)<-УМНОЖЕНИЕ(1,Х,У,Z);

ВЫЧИТАНИЕ(Х,У,Z)<-УМНОЖЕНИЕ(1,Х,Z,У);

УМНОЖЕНИЕ(Х,У,Z)<-УМНОЖЕНИЕ(Х,У,0,Z);

ДЕЛЕНИЕ(Х,У,Z)<-УМНОЖЕНИЕ(У,Z,0,Х);

Поряд з арифметичним предикатом існують два предикати БОЛЬШЕ й НЕ. Вбудований предикат БОЛЬШЕ(Арг1,Арг2) призначений для порівняння двох цілих чисел або змінних. Він має два аргументи: цілих або змінних, конкретизованих цілими. Обидва аргументи до моменту виконання повинні бути визначені. Якщо ці вимоги не виконані, то з'явиться повідомлення про помилку. Предикат виконаний, якщо Арг1 > Арг2, інакше - не виконаний. Незважаючи на те, що предикат БОЛЬШЕ один, його достатньо для опису всіх можливих предикатів для порівняння числової інформації: дорівнює - РАВНО; менше -МЕНЬШЕ; менше і дорівнює - МИР і так далі. Це показує база знань, наведена нижче:

РАВНО(Х,Х);

МЕНЬШЕ(Х,У)<-БОЛЬШЕ(У,Х);

МИР(Х,У)<-НЕ(БОЛЬШЕ(Х,У));

В останньому реченні використаний вбудований предикат НЕ, його синтаксис: НЕ(Арг1);

Цей вбудований предикат має один аргумент, він обов'язково повинен бути предикатом. Предикат НЕ виконаний тоді й тільки тоді, коли предикат-аргумент не виконаний.

Останній вбудований предикат - це предикат "ОТСЕЧЕНИЕ", призначений для керування логічним виводом. Цей предикат буде потрібний для розв'язання наступних проблем:

1. Обмеження кількості знайдених розв'язків.

2. Знаходження деякого особливого розв'язку завдання.

3. Обмеження обсягу пошуку, з метою підвищення ефективності роботи комп'ютера.

Предикат " ОТСЕЧЕНИЕ " позначається знаком вигуку-(!).

Необхідно відзначити, що це традиційне позначення відсікання в системах логічного програмування. Якщо даний предикат використати у якості цілі в реченні, то отриманий при цьому ефект можна проілюструвати дверима, через які можна пройти тільки зліва направо, але не можна повернутися назад через ці двері. Роль дверей виконує символ!.

Як відомо, система Пролог-Д буде намагатися виконувати цілі в реченні у порядку перегляду зліва направо, починаючи від символу <-, від першої до останньої цілі. Якщо яка-небудь ціль виявляється не виконаною, то здійснюється повернення й робиться спроба знайти альтернативні розв'язки. Відсікання обмежує можливість пошуку альтернатив з того моменту, як була переглянута ціль, що позначена символом!. Із цієї причини, якщо не виконані цілі А,Б,В, повернення для знаходження альтернативних рішень у реченні приклад <- А,Б,В,!,Г,Д,Е; можливий, а, якщо не виконані цілі Г,Д або Е, те вже неможливо. Необхідно відзначити важливість цього предиката, особливо при описі завдань, що не допускають множинні розв'язки.

37. Рекурсія в Пролог

Існує величезна кількість завдань, у яких відносини між об'єктами можна визначити тільки використовуючи самі обумовлені співвідношення. При цьому отримуємо правила, що називають рекурсивними. Застосування рекурсії для опису завдань при роботі із системами логічного програмування є широко розповсюдженим прийомом. Рекурсію проілюструємо декількома прикладами побудови програм, як обчислювальних, так і логічних. Перший - приклад обчислення найбільшого загального дільника (НОД) двох чисел. Для опису обчислення НОД використаються наступні міркування. По-перше, якщо а=b, то с=а=b; По-друге, якщо а>b, те необхідно обчислити НОД для чисел b й а-b; По-третє, якщо b>а, те необхідно обчислити НОД для чисел а й b-а. Ці три твердження можуть бути записані на Пролог-Д:

нод(а,а,а); нод(а,b,с)<-БОЛЬШЕ(а,b), ВЫЧИТАНИЕ (а,b,d),нод(b,d,с);

нод(а,b,с)<-БОЛЬШЕ(b,а), ВЫЧИТАНИЕ (b,а,d),нод(а,d,с);

ВЫЧИТАНИЕ (X,У,Z)<-УМНОЖЕНИЕ(1,X,Z,Y);

Якщо до цієї бази знань поставити запитання:?нод(10,15,х); відповідь системи Пролог-Д: х=5 ІНШИХ РІШЕНЬ НЕМАЄ. Предикат нод є оберненим. Другий приклад - про обчислення елементів послідовності: 0, 1,2, З, 5, 8, 13, 21, 34, 55, 89, 144,..., відомої як послідовність Фібоначі. Кожен елемент її визначається наступними правилами:

fo=0, fi=l, fn =fn-l+fn-2, При П>1 Перша формула відповідає твердженню про те, що значення нульового елемента послідовності дорівнює нулю. Це можна записати у вигляді факту: Фиб(0,0);. Другий рядок відповідає твердженню: перший елемент дорівнює 1. На Пролог-Д це можна записати так: Фиб(1,1);. Третій рядок являє собою запис рекурсивного співвідношення:

Фиб(N,Х)<-БОЛЬШЕ(N, 1), ВЫЧИТАНИЕ(N, 1,М),

BЫЧИTAHИE(N,2,K),Фиб(М,У), Фиб(К,Z),ДОДАВАННЯ(У,Z,Х);

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

У відповідь на питання:

?Фиб(10,Х); відповідь системи Пролог-Д: х=55 ІНШИХ РІШЕНЬ НЕМАЄ

При роботі з базою знань для обчислення N-ro числа Фібоначі необхідно всього лише N рекурсивних звертань. При обчисленні елементів послідовності Фібоначі може з'являтися нескінченна петля при виконанні програми.

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

38. Графічні можливості системи Пролог

У системі Пролог-Д визначений набір графічних примітивів, що відображають графічні об'єкти й побудовані таким чином, що з погляду синтаксису кожний з них може бути тільки ціллю й приймає значення "істина"(викон.), якщо на екрані з'являється графічне зображення об'єкта. При записі в правилі декількох графічних примітивів і виконанні даного правила на екрані з'являється об'єднання графічних образів у тій послідовності, як вони описані в правилі. У всіх графічних вбудованих предикатах аргументи повинні бути цілими або змінними, конкретизованими цілими, або не конкретизованими змінними. Якщо ця вимога не виконана, то з'явиться повідомлення про помилку.

У предикатах ТОЧКА, ЛИНИЯ, ОКРУЖНОСТЬ, ЗАКРАСКА останній параметр задає колір. Якщо на цьому місці стоїть не конкретизована змінна, то виводиться повідомлення про помилку.

У системі Пролог-Д передбачені наступні вбудовані графічні предикати:

1. ТОЧКА.

Синтаксис: ТОЧКА(Арг1,Арг2,АргЗ)

У будований предикат ТОЧКА має три аргументи. Нижче наведені результати виконання залежно від типу аргументу.

ТОЧКА(ц1,ц2,цЗ) Установити крапку з координатами (ц1,ц2) і кольором цЗ;

ТОЧКА(ц1,ц2,ПЗ) ПЗ:= колір_крапки(ц1,ц2);

ТОЧКА(ц1,П2,цЗ) Малювати лінію з початковою крапкою (ц1,0), кінцевою - (ц1,211) кольором цЗ;

ТОЧКА(П1,ц2,цЗ) Малювати лінію з початковою крапкою (0,ц2), кінцевою - (255,ц2) кольором цЗ;

ТОЧКА(П1,П2,цЗ) Заповнити екран кольором цЗ.

У цих п'ятьох випадках предикат істиний, інакше - виконання програми припиняється й виводиться повідомлення про помилку.

ЛИНИЯ

Синтаксис: ЛИНИЯ(Арг1,Арг2,АргЗ,Арг4,Арг5).

Цей у будований предикат має п'ять аргументів. П'ятий аргумент завжди повинен бути цілим, арифметичним виразом або змінним, конкретизованим цілим. Результати виконання наведені нижче:

ЛИНИЯ(ц1,ц2,цЗ,ц4,ц) Малювати лінію з початковою крапкою (ц1,ц2), кінцевою - (цЗ,ц4), кольорами ц

ЛИНИЯ(ц1,ц2,цЗ,П4,ц) Малювати зафарбований трикутник з вершинами (ц1,ц2), (ц3,0), (цЗ,211) і кольорами ц;

ЛИНИЯ(ц1,ц2,ПЗ,ц4,ц) Малювати зафарбований трикутник з вершинами (ц1,ц2), (0,ц4), (255,ц4) і кольорами ц;

ЛИНИЯ(ц1,П2,цЗ,ц4,ц) Малювати зафарбований трикутник з вершинами (ц1,0), (ц1,211), (цЗ,ц4) і кольорами ц;

ЛИНИЯ(П1,ц2,цЗ,ц4,ц) Малювати зафарбований трикутник з вершинами (0,ц2), (255,цЗ), (цЗ,ц4) і кольорами ц;

ЛИНИЯ(П1,П2,цЗ,ц4,ц)| ЛИНИЯ(ц1,ц2,ПЗ,П4,ц)| ЛИНИЯ(ц1,П2,ПЗ,П4,ц)| ЛИНИЯ(П1,ц2,ПЗ,П4,ц) - Заповнення екрана кольорами ц ЛИНИЯ(П1,П2,цЗ,П4,ц) | ЛИНИЯ(П1,П2,ПЗ,ц4,ц) | ЛИНИЯ(П1,П2,ПЗ,П4,ц)|

ЛИНИЯ(ц1,П2,цЗ,П4,ц) - Вертикальними, зафарбованими кольорами ц прямокутник, з вершинами (ц1,0), (ц1,211), (ц2,0),(ц2,211);

ЛИНИЯ(П1,ц2,ПЗ,ц4,ц) Горизонтальний зафарбований кольорами ц прямокутник з вершинами (0,ц2), (255,ц2), (0,ц4), (255,ц4);

ЛИНИЯ(ц1,П2,ПЗ,ц4,ц) Чотирикутник кольорами ц із вершинами (ц1,0),(ц1,211),(0,ц4),(255,ц4);

ЛИНИЯ(П1,ц2,цЗ,П4,ц) Чотирикутник кольорами ц із вершинами (0,ц2),(255,ц2),(цЗ,0),(цЗ,211).

У цих шістнадцятьох випадках предикат вірний, інакше виконання програми припиняється й видається повідомлення про помилку.

З ОКРУЖНОСТЬ

Синтаксис: ОКРУЖНОСТЬ(Арг1,Арг2,АргЗ,Арг4). У будований предикат КОЛО має чотири аргументи. Нижче наведені результати виконання залежно від типів аргументів.

ОКРУЖНОСТЬ(ц1,ц2,цЗ,ц) Коло із центром (ц1,ц2), радіусом цЗ, кольорами ц;

ОКРУЖНОСТЬ(ц1,ц2,ПЗ,ц) | ОКРУЖНОСТЬ(ц1,П2,ПЗ,ц) | ОКРУЖНОСТЬ(Ш,ц2,ПЗ,ц) Заповнення екрана кольорами ц ОКРУЖНОСТЬ(П1,П2,ПЗ,ц) | ОКРУЖНОСТЬ(П1,П2,цЗ,ц) | ОКРУЖНОСТЬ(ц1,П2,цЗ,ц) Вертикальний зафарбований кольорами ц прямокутник з вершинами: (ц1-цЗ,0), (ц1-цЗ,211), (ц1+цЗ,0), (ц1+цЗ,211);

ОКРУЖНОСТЬ(Ш,ц2,цЗ,ц) Горизонтальний зафарбований кольорами ц прямокутник з вершинами: (0,ц2-цЗ), (255,ц2-цЗ), (0,ц2+цЗ), (255,ц2+цЗ); У цих восьми випадках предикат вірний, інакше виконання програми припиняється й виводиться повідомлення про помилку: "Невыполнимый предикат ОКРУЖНОСТЬ"

4 ЗАКРАСКА

Синтаксис: ЗАКРАСКА(Арг1,Арг2,АргЗ,Арг4).

Убудований предикат ЗАКРАСКА(має чотири аргументи. Процедурно цей предикат означає зафарбувати кольорами АргЗ усередині контуру із граничними кольорами Арг4 починаючи із крапки (Арг1,Арг2). Предикат завжди вірний. Всі аргументи повинні бути цілими, арифметичними виразами або змінними, конкретизованими цілими. Якщо ця умова не виконується, то виконання програми припиняється й виводиться повідомлення про помилку.

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

Графічні можливості призначені для виконання виводу графіки та інших подібних операцій. Вбудовані предикати, якщо вони записані у питанні, повинні виконуватися однаково, незалежно від того, записана в пам'ять машини база знань чи ні, і яка це база знань.

39.Обробка списків в Пролог

Список – це лінійно упорядкована сукупність елементів одного доменного типу. Елементами списку можуть бути цілі числа, дійсні числа, символи, символьні рядки і структури. Порядок розміщення елементів є суттєвою рисою списку; ті самі елементи, упорядковані по-іншому, утворюють уже зовсім інший список. Список може містити довільну кількість елементів, єдиним обмеженням є обсяг оперативної пам’яті комп’ютера. Кількість елементів у списку називається його довжиною. Список, який не містить елементів, називається порожнім, довжина порожнього списку дорівнює нулю. Складові списку зв’язані між собою, тому з ними можна працювати і як із групою (списком у цілому), і як з індивідуальними об’єктами (елементами списку).

У Пролозі дозволяється виконувати зі списками цілий ряд операцій, зокрема: перевірку на належність елемента до списку, вставлення елемента в список, вилучення із списку даного елемента, заміну одного елемента списку іншим, поділ списку на два, злиття двох списків, упорядкування елементів списку.

Список зручно використовувати при створенні баз даних, баз знань, експертних систем, словників тощо.

Список у Пролозі подається множиною елементів, які відокремлюються між собою комами і обмежуються квадратними дужками. Приклад: [1,2,3,4].

Порожній список позначається так: [].

Непорожній список можна розглядати як структуру, яка складається з двох частин: перший елемент списку, який називається головою списку; остання частина списку, яка називається хвостом. Голова є елементом списку, хвіст є списком сам по собі. Якщо хвіст є непорожнім списком, то його знову можна поділити. Якщо список складається з одного елемента, то в ньому можна виділити голову, якою буде цей самий елемент, і хвіст, який є порожнім списком.

Пролог дає можливість явно створювати голову і хвіст списку. Замість відокремлення елементів комами, ви можете розділити голову і хвіст знаком (|).

Наприклад, список [a, b, c] дорівнює списку [a | [b, c]], який в свою чергу рівний списку [a|[b|[c|[]]]].

Розподільниками можна також комбінувати. Так список [a, b, c, d] можна задати у вигляді [a, b|[c, d]].

Для обробки списків найбільш підходять рекурсивні алгоритми. Обробка списку складається з рекурсивного зсуву і обробки голови списку до тих пір, поки список не стане пустим. Алгоритм такого типу, традиційно має дві фрази. Перша з них говорить, що потрібно робити з списком, а друга - що робити з пустим списком.

40.Прості типи даних системи Пролог

В якості простих даних виступають змінні або ж константи. Константа може бути або ж символьною (char), або ж числовою (integer, real), атомapною (symbol, string).

Змінна позначається ідентифікатором. Ідентифікатор починається з великої букви у діапазоні від А до Z, або ж символом підкреслення (_). Як ми вже зазначали, єдиний символ підчеркування позначає анонімну змінну. В Пролозі змінна може зв’язуватись з любим допустимим аргументом або об’єктом даних. Відмітимо, що змінні Прологу є локальними, а не глобальними. Іншими словами, якщо два пункти мають змінну Х, тоді ці Х є різними змінними.

Константи включають символи, числа і атоми. Значення константи міститься в її імені. Так константа 2 може символізувати тільки число 2, а константа abracadabra може символізувати тільки стрічку abracadabra.
Символи.
Символи мають тип char, вони будуються з символів коду ASCII.
Існує два способи задання символів в якості констант Прологу: безпосередньо, або ж з попереднім символом (). Ось приклад деяких друкованих символів:.f.,.4.,.F.. Якщо ж вам потрібно написати символи типу (), (|), (.), тоді перед ними потрібно поставити символ (): (.\.), (.|.), (...). Деякі пари символів позначають спеціальні дії, наприклад:
..-перехід на нову стрічку.
..-повернення каретки.
..-горизонтальна табуляція.
Числа.
Числа мають тип або іnteger, або real. Цілі містять значення з діапазону від -32768 до 32767 включно. Дійсні зберігаються в форматі ІEEE в проміжку від 1е-308 до 1е308.
Атоми.
Атом має тип або ж symbol, або ж string. Пролог виконує автоматичне перетворення типів між цими двома доменами.
Ім.я символьних атомів починається з маленької букви.
Стрічкові атоми повинні заключатись в подвійні лапки і можуть містити любу комбінацію дозволених символів PDC Прологу.

41.Структуровані типи даних системи Пролог

Складні об’єкти даних дозволяють вам заключати декілька частин інформації в єдиний пункт. Наприклад, дата 2 квітня 1994 складається з 3 частин. Але іноді їх корисно з’єднати воєдино:
date(|April|,2,1989)
Так виглядає факт Прологу, в даному випадку - просто об’єкт даних. Він починається з імені або ж функтора (в нашому прикладі date). Функтор не символізує якесь обчислення, яке повинно бути виконаним. Це просто ім’я об’єкту. Аргументи складного об’єкту самі можуть бути складними об’єктами.

Структуровані типи даних:

1) Функції – аргументом функції може бути будь-який терм, але функція повинна містити хоча б один аргумент;

2) Списки – елементом списку може бути будь-який терм, список може мати будь-яку кількість елементів;

3) Порівняння списків – є два шаблони для визначення списків: перечислення та початок і остача, ці шаблони визначають різні внутрішні представлення;





Дата публикования: 2015-01-13; Прочитано: 1206 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.013 с)...