Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Лабораторна робота №3-4
Тема. Структура програми на пролозі.
Мета. Ознайомити студентів із структурою програми записаної в середовищих програмування Turbo Prolog 2.0. та Visual Prolog
Теоретичні відомості
Програма на мові ПРОЛОГ включає наступні основні розділи:
опис імен і структур об'єктів (domains);
опис предикатів назв стосунків, що існують між
об'єктами (predicates);
розділ цільових тверджень (goal), який може бути відсутнім; в цьому випадку програма запрошуватиме цільове твердження при запуску;
опис фактів і правил, що описують стосунки (clauses).
Імена об'єктів (констант) в Пролозі пишуться з маленької букви, а змінних з великою.
Розглянемо, як можна описати на Пролозі завдання з деякої наочної області, наприклад географія.
Програма 1
DOMAINS
gorod, strana = symbol
PREDICATES
situ(gorod,strana)
CLAUSES
situ (london, england).
situ (petersburg, russia).
situ (kiev, ukraine).
situ (pekin, asia).
situ (warszawa, poland).
situ (berlin, europe).
situ (X, europe):- situ (X, russia).
situ (X, europe):- situ (X, poland).
Вираження
situ(kiev, ukraine)
описує той факт, що місто Київ знаходиться на Україні. Раніше в програмі був введений відповідний предикат, що працює з об'єктами символьного типу. Назва міста і країни тут є константами, тому по правилах Прологу їх потрібно писати з маленької букви. Замість блоку визначень:
DOMAINS
gorod, strana = symbol
PREDICATES
situ(gorod,strana)
можна було просто описати предикат:
PREDICATES
situ(symbol, symbol)
Інколи перший варіант кращий, оскільки дозволяє оцінювати семантичний сенс аргументів предиката. В кінці розділу clauses Програми 1 описані два правила. Правило задає новий предикат через предикати, визначені раніше. Правило 7 складається з голови (предиката) і тіла послідовності предикатів. Голова відділяється від тіла значком :-, який можна інтерпретувати як слово «Якщо». Таким чином, висновок є головою правила, а тіло правила складається з набору посилок.
Використання правил є основним способом представлення знань в інтелектуальних системах.
Сенс правила полягає в тому, що мета, що є головою, буде достеменною, якщо інтерпретатор Прологу зможе показати, що всі вирази (подцели) в телі правила є достеменними.
У правилах буква X (або будь-яка інша заголовна буква, або будь-яке слово, що починається із заголовної букви) позначає змінну, яка може набувати різних значень.
Так, правило
situ (X, europe):- situ (X, poland)
означає, що будь-яке польське місто є одночасно європейським містом. Додаванням нових правил можна поповнювати і модифікувати опис завдання. Якщо ми хочемо описати той факт, що всі міста Франції є одночасно європейськими містами, то досить додати всього одне правило
situ (X, europe):- situ (X, france)
і можна буде як і раніше використовувати всі останні факти про міста Європи.
У Пролозі можна використовувати складені об'єкти. Складені об'єкти дозволяють описувати ієрархічні структури, в яких опис одного предиката включає опис інших предикатів.
Наприклад:
Програма 2
DOMAINS
personal_library=book(title,author,publication)
publication= publication(publisher,year)
collector,title,author,publisher=symbol
year=integer
PREDICATES
collection(collector, personal_library)
CLAUSES
collection(“Іванов”,book(“Війна і мир”, “Лев Толстой”
publication(“Москва”,1990))).
При описі правил часто виникає необхідність використовувати логічні в'язки І і АБО. Як в'язка І використовується кома, а як в'язка АБО крапка з комою. Наприклад:
gigant(X):- rost(X,Y),Y>200.
star_or_mlad(X):- X>70; X<10.
ПРОЛОГ має велику кількість вбудованих предикатів, тобто предикати, визначувані автоматично. Наприклад, вбудований предикат nl викликає переклад рядка, а вбудований предикат write застосовується для виведення інформації на екран. Вбудовані предикати використовуються так само, як і визначувані користувачем предикати, але вбудований предикат не може бути головою правила або з'являтися у факті.
Часто використовуваними вбудованими предикатами є = (уніфікація) і логічне заперечення not. Наприклад:
student(X):- X=”Петров”; X=”Иванов”.
xor_student(X):- not(X=”Петров”), not(X=”Иванов”).
planeta(X):- not(X=”солнце”).
Затвердження not(X = Y) еквівалентно X<>Y.
Інколи буває корисно використовувати предикати, про які заздалегідь відомо, достеменні вони або помилкові. Для цих цілей використовують предикати true і fail. Предикат true завжди достеменний, тоді як fail завжди помилковий. Останній предикат використовується для управління процесом рішення задачі на Пролозі.
Пролог-програма може використовувати коментарі, які не впливають на виконання програми, але можуть надати допомогу людині, що читає програму. ПРОЛОГ ігнорує довільне число рядків, поміщене між символами /* і */. Все, що знаходиться між % і кінцем рядка, також розглядається як коментар:
/* Тут записаний
коментар */
% Це теж коментар
При описі конкретної наочної області зазвичай є набір вихідних фактів і правдоподібних допущень, на підставі яких формулюються правила.
Розглянемо, яким чином на Пролозі можна описати завдання про родинні стосунки.
Хай є факти про батьківство:
1) Іван батько Ігоря.
2) Іван батько Сидора.
3) Сидір батько Лізи.
Введемо також три предикати:
Чоловік (x), що означає, що x чоловік
Єдинокровний (x,y), такий, що означає єдинокровність x і в
Брат (x,y), що означає, що x брат в.
Справедливі, вочевидь, наступні правила:
1) «Всі батьки чоловіки».
2) «Якщо у дітей один батько, то вони єдинокровні».
3) «Брат це єдинокровний чоловік».
Розглянемо виведення рішення при відповіді на питання:
«Чи є брати у Ігоря?».
Програма 3
DOMAINS
person = symbol
PREDICATES
otec(person,person)
man(person)
brat(person,person)
CLAUSES
man(X):-otec(X,_).
brat(X,Y):-otec(Z,Y),otec(Z,X),man(X),X<>Y.
otec(ivan,igor). otec(ivan,sidor). otec(sidor,lisa).
У другому правилі програми вказана умова X<>Y. Це дозволяє описати пролог-програмі той факт, що людина не може бути власним братом.
Після запиту
goal: brat(igor,X)
Система видасть
X = sidor
Це відповідає нашим уявленням про правильне рішення.
Наведені приклади примітивні, але вони дозволяють представити корисність рішень, які може згенерувати ПРОЛОГ при великій кількості фактів і правил.
Хід роботи.
Частина І
Частина І