Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

УМНОЖЕНИЕ(Арг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,цЗ) Заповнити екран кольором цЗ.

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




Поделиться с друзьями:


Дата добавления: 2015-01-03; Просмотров: 542; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.