Лабораторна робота №8, Арифметика й інші вбудовані предикати в Пролог-Д
Код роботи: 1116
Вид роботи: Лабораторна робота
Предмет: Технологія створення програмних та інтелектуальних систем
Тема: №8, Арифметика й інші вбудовані предикати в Пролог-Д
Кількість сторінок: 25
Дата виконання: 2016
Мова написання: українська
Ціна: 250 грн
Мета: отримання основних навичок роботи при виконанні арифметичних дій
Хід виконання роботи
1. Запустити систему Пролог-Д.
Системи логічного програмування, до числа яких відноситься й Пролог-Д, не призначені для обчислень. Традиційний для Пролог-Д підхід при виконанні арифметичних дій описаний у вправі 5 з попереднього розділу. Однак для визначення в такий спосіб всіх математичних дій пам'яті комп'ютера буде недостатньо. Тому традиційні дії, пов'язані з виконанням арифметичних операцій здійснюються за допомогою спеціальних вбудованих предикатів. У системі Пролог-Д для виконання арифметичних дій передбачений один убудований арифметичний предикат:
УМНОЖЕНИЕ(Арг1,Арг2,Арг3,Арг4).
Вбудований предикат УМНОЖЕНИЕ має чотири аргументи: цілих, змінних, конкретизованих цілими, не конкретизованих змінних, допускає обертання всіх аргументів, однак, він може бути використаний тільки як ціль в реченні. Предикат УМНОЖЕНИЕ передбачає реалізацію формули: Арг1*Арг2+Арг3=Арг4.
Предикат передбачає оборотність аргументів і реалізує арифметичні операції в області цілих чисел, передбачених синтаксисом вхідної мови (- 32767 <число> 32767). Наступна база знань мовою Пролог-Д показує, що за допомогою даного предиката можна описати будь-які арифметичні операції:
СЛОЖЕНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(1,X,Y,Z);
ВЫЧИТАНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(1,X,Z,Y);
УМНОЖЕНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(X,Y,0,Z);
ДЕЛЕНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(Y,Z,0,X);
У всіх чотирьох випадках X,Y – суть операнди операцій, а Z – результат. Наприклад, СЛОЖЕНИЕ(X,Y,Z) реалізує арифметичну операцію додавання: Z=X+Y. Більш докладний опис синтаксису убудованого предиката УМНОЖЕНИЕ наведене в описі синтаксису. Предикат УМНОЖЕНИЕ дозволяє описувати обчислювальні завдання.
Для освоєння принципів роботи з вбудованими арифметичними предикатами і вбудованими предикатами порівняння розглянемо наступні завдання. Наприклад, вираз Z = X * Y запишеться на Пролог в наступному вигляді:
?УМНОЖЕНИЕ(X,Y,Z).
Приклад 1. На Пролог-Д необхідно описати обчислення площі прямокутника, що має сторони довжиною a й b. Відома формула площі прямокутника Sпр=a*b.
Предикат повинен мати три аргументи – довжини сторін і величину площі. Ім'я предиката повинне відбивати його призначення; цьому критерію надамо ім'я площадь:
Перший предикат УМНОЖЕНИЕ треба було визначити для наочності запису. Відмітимо, що предикат площа оборотний, тобто користуючись цим описом можна обчислити не тільки площу по заданих сторонах, але й любу (одну) сторону по іншій стороні й площі. До бази знань можна поставити питання:
Більш складне завдання представлене в наведеному нижче прикладі.
Приклад 2. На Пролог-Д необхідно описати обчислення об’єму паралелепіпеда висотою h, у основі якого прямокутник, що має сторони довжиною a й b. Формула об’єму паралелепіпеда Vпар = a*b*h.
Предикат, що буде виконаний, якщо буде обчислений об’єм паралелепіпеда, повинен мати чотири аргументи – довжини сторін a, b, висоту h і величину об’єму. Ім'я предиката повинно відображати його призначення – цьому критерію задовольнить ім'я обьем:
Як і раніше, предикат об’єм є оборотний, тобто використовуючи цей опис можна обчислити не тільки об’єм по заданих сторонах і висоті, але й любу (одну) сторону або висоту по заданим висоті, стороні й об’єму. Як альтернатива, можна інакше записати об’єм, якщо скористатися формулою:
Приклад 3. На Пролог-Д необхідно обчислити число х=2*3+1 Для цього достатньо набрати на клавіатурі питання:
У даних випадках у вбудованих предикатах змінні як би перевернуті навпаки.
Завдання:
1. Напишіть правило і питання для обчислення площі круга.
2. Обчисліть вираз «х = 8/2».
3. Обчисліть вираз «х = 10 - 7».
4. Обчисліть вираз «х = 5 * 2 * 3 + 2».
5. Спробуйте ввести питання:
?УМНОЖЕНИЕ(x,3,1,7).
Поясніть результат і запишіть початковий текст завдання.
Поряд з арифметичним предикатом існують два предикати БОЛЬШЕ й НЕ. Вбудований предикат БОЛЬШЕ(Арг1,Арг2) призначений для порівняння двох цілих чисел або змінних. Він має два аргументи: цілих або змінних, конкретизованих цілими. Обидва аргументи до моменту виконання повинні бути визначені. Якщо ці вимоги не виконані, то з'явиться повідомлення про помилку: "Функція не може бути виконана.". Предикат виконаний, якщо Арг1 > Арг2, інакше - не виконаний. Незважаючи на те, що предикат БОЛЬШЕ один, його достатньо для опису всіх можливих предикатів для порівняння числової інформації: дорівнює – РАВНО; менше – МЕНЬШЕ; менше і дорівнює – МИР і так далі. Це показує база знань, наведена нижче:
В останньому реченні використаний вбудований предикат НЕ, його синтаксис: НЕ(Арг1);
Цей вбудований предикат має один аргумент, він обов'язково повинен бути предикатом. Предикат НЕ виконаний тоді й тільки тоді, коли предикат- аргумент не виконаний.
Розглянемо тепер нескладний приклад, що ілюструє застосування БОЛЬШЕ й НЕ.
Приклад 4. Опишіть мовою Пролог-Д обчислення функції Хевисайда, задану формулою:
База знань повинна містити опис предиката менше і дорівнює, що вище вже був описаний. Предикат, що виконується при обчисленні функції Хевисайда, буде називатися ХЕВИСАЙД. Цей предикат буде мати два аргументи, перший – це аргумент функції, а другий – її значення. Предикат ХЕВИСАЙД визначається через два альтернативних описи для всіх значень Х:
До цієї бази знань можна задати різні питання.
Завдання: задати базі знань питання для отримання усіх варіантів відповідей для формули Хевісайда.
Останній вбудований предикат – це предикат "ОТСЕЧЕНИЕ", призначений для керування логічним виводом. Цей предикат буде потрібний для розв’язання наступних проблем:
1. Обмеження кількості знайдених розв’язків.
2. Знаходження деякого особливого розв’язку завдання.
3. Обмеження обсягу пошуку, з метою підвищення ефективності роботи комп'ютера.
Предикат " ОТСЕЧЕНИЕ " позначається знаком вигуку – (!).
Необхідно відзначити, що це традиційне позначення відсікання в системах логічного програмування. Якщо даний предикат використати у якості цілі в реченні, то отриманий при цьому ефект можна проілюструвати дверима, через які можна пройти тільки зліва направо, але не можна повернутися назад через ці двері. Роль дверей виконує символ !.
Як відомо, система Пролог-Д буде намагатися виконувати цілі в реченні у порядку перегляду зліва направо, починаючи від символу <-, від першої до останньої цілі. Якщо яка-небудь ціль виявляється не виконаною, то здійснюється повернення й робиться спроба знайти альтернативні розв’язки. Відсікання обмежує можливість пошуку альтернатив з того моменту, як була переглянута ціль, що позначена символом !. Із цієї причини, якщо не виконані цілі А,Б,В, повернення для знаходження альтернативних рішень у реченні приклад <- А,Б,В,!,Г,Д,Е; можливий, а, якщо не виконані цілі Г,Д або Е, те вже неможливо. Необхідно відзначити важливість цього предиката, особливо при описі завдань, що не допускають множинні розв’язки.
Проілюструємо предикат відсікання на прикладі бази знань «МАТЬ». Дійсно, у кожної людини не може бути дві «фізичні» матері, тому, визначивши для даної людини ім'я матері, необхідно припинити подальші пошуки.
до бази знань може бути задане питання:
Після знаходження першого розв’язку пошук альтернатив не виконується.
Завдання:
1. Подумайте, що буде, якщо забрати в увсіх реченнях останнього приклада предикати відсікання?
3. Опишіть мовою Пролог-Д обчислення площ геометричних фігур: трапеції, трикутника, паралелограма.
4. Опишіть обчислення площі кругу й довжини окружності. Яка точність обчислень цих величин? Чи можна обчислити радіус кола по довжині окружності?
5. Мовою Пролог-Д напишіть базу знань, у якій визначається функція, задана співвідношенням:
6. Які складності можуть виникнути в базі знань про мам, якщо у двох мам діти будуть тезками?
7. Напишіть програму на Пролог-Д, що знаходить ім'я мами хлопчика Володя в базі знань. Його маму звуть Оля, а не Лида.
8. Припустимо, що дано програму на Пролог-Д:
Яким повинен бути предикат pp(x), щоб система знайшла один розв’язок?, нескінченно багато рішень?
2. Оформити звіт, в який включити виконання завдань, Пролог-програму, ПИТАННЯ, представлені засобами Прологу, і відповіді на дані ПИТАННЯ, видані Пролог-системою.