Prolog Реалізація на ПЕОМ

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

1. Інтегрованих середовищ мови Turbo Prolog.

2. Структура програми

3. Стандартні типи доменів

4. Прототипи предиката

5. Твердження і цілі

6. Арифметичні вирази.

7. Вбудовані прдікати мови

1. Інтегроване середовище мови Turbo Prolog.

Функціонування Т.Р. вимагає наявність наступних стандартних каталогів:

кореневої Prolog, в якому повинні знаходиться наступні файли:

prolog.exe

prolog.ovl для створення exe файлу

prolog.r тексти повідомлення про помилки

prolog.hlp файл допомоги

prolog.sys конфігурація середовища

prolog.lib бібліотеки

prolog.obj допоміжний файл для створення пользов-їх exe файлів

підкаталог PRO для користувацьких вихідних файлів (розширення. pro)

підкаталог OBJ для користувацьких обьктних і prg файлів

підкаталог EXE для зберігання призначених для користувача exe файлів

підкаталог DOS для команд ОС в тому випадку, якщо передбачається їх використання з користувацьких програм. (Min command.com)

2 Структура програми на TURBO PROLOG

Prolog. Реалізація на ПЕОМ

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

2 опис прототипів для користувача предикатів

3 "затвердження" включає опис фактів у вигляді предикатів і правил, тобто декларативних і процедурних знань

4 містить мета вирішення завдань, при його відсутності система запитує мета виконання завдання у вікні діалогу і в цьому-ж вікні отримуємо відповідь, за його присутності в ньому поміщаємо користувальницький інтерфейс.

Місце для друкування

-35 - 36 - 37 -

readint ()

(Integer): (0) - читає ціле число, читання закінчується натисканням

readreal ()

(Real): (0) - вещ.

readchar ()

(Char): (0) - читає одиничний символ

readln () (string): (0) - читає рядок символів

inkey () (char): (0) - закінчується істиною, якщо після попередньої операції була натиснута клавіша, повертається її код. Якщо не була натиснута, то предикат закінчується невдачею

nl - код двох клавіш - перехід на новий рядок

write (x1, x2, ...)

(Змінні і константи): (i, i, ...) - видає на поточний пристрій запису констант і зміст змінних

writef (, x1, x2, ...)

(String,): (i, i, ...)

Структура формату:

"% - M.pw", де% - ознака форматного виведення

якщо заданий "-", то знаки повинні вирівнюватися по лівому краю, якщо не заданий - по правому

m - довжина поля виводу

p - кількість цифр після крапки

w - тип числа, замість w записується f, якщо виводиться число в десятковому вигляді, e - у експотенціальной формі, q - в самому короткому форматі.

Предикати роботи з символьними даними.

str_lon (,)

(String, integer): (i, i) (i, 0)

якщо задано (i, i), перевіряється довжина рядка, якщо (i, 0) - повертається довжина рядка

Перетворення типів

Всі предикатні перетворення діють в обидві сторони. Випадок (i, i) перевіряє істинність для всіх типів, крім real. Перетворення між типами string, symbol і real, integer пр-ся (?) Автоматично.

char_int (,)

(Сhar, integer): (i, 0) (0, i) (i, i)

str_char (,)

(String, сhar): (i, 0) (0, i) (i, i)

str_int (,)

(String, real): (i, 0) (0, i)

і т. д.

Робота з командами операційної системи

Необхідною умовою для роботи з предикатами цієї групи є наявність підкаталогу DOS, в якому б був записаний мінімум command.com

system ()

(String): (i) - передає команду OS

date (,,)

(Integer, integer, integer): (i, i, i) (0, 0, 0) - встановлює, якщо (i, i, i), або повертає, якщо (0, 0, 0) системну дату

time ... - Те ж

dir (,,)

(String, string, string): (i, i, 0) - видаються на екран специфіковані файли з каталогу по маршруту. Можливо вибрати з каталогу ім'я одного файлу за допомогою стрілок керування курсором, при натисканні ім'я цього файлу присвоюється третьому аргументу предиката

Спеціальні предикати мови Turbo Prolog

bouncl () - "істина, якщо змінна є конкретизованої

free () - "істина, якщо змінна не є конкретизованої

fail - завжди помилкові. викликає повернення для перевірки бази в правилах

! - (Cat) - предикат відсікання, обмежує повернення

exit - зупиняє виконання користувацької програми і передає управління меню Turbo Prolog

trace - загальне включення режиму відладки. Вказується на початку вихідної програми

trace ()

(Symbol): (i) (0) - встановлює, якщо i, або повертає, якщо 0, поточний режим відладки. Як статусу можна використовувати on / off. Використання цього предиката припускає наявність trace на початку програми

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

nowarnings - відключає попередження в процесі компіляції

project "ім'я файлу" - дана програма є частиною проекту

include "ім'я файлу" - в компіляцію включається файл з вказаним ім'ям

Керування ходом виконання програм на мові ТР.

1. Рекурсія.

У механізм опрацювання програм на мові ТР закладена рекурсія, тобто обчислення значення функції за допомогою тієї ж функції, але зі зміненими параметрами. Рекурсія в ТР реалізується в 2 етапи:

1) вихідна завдання розбивається на більш дрібні приватні задачі і формуються приватні рішення і на основі яких потім буде отримано спільне рішення завдання.

Процес розбиття задачі на підзадачі наз-ся редукцією. Редукція завершується в тому випадку, якщо сформована підзадача, яка може бути вирішена безпосередньо.

2) складання рішення, починаючи від самого (?) Останнього до самого загального. Для використання рекурсії в програмах необхідно використовувати наступний формат правила рекурсії:

if

(1)

(2)

(3)

(4)

(5)

У структурі правила компоненти (1), (3), (5) можуть бути присутніми або бути відсутнім з урахуванням специфіки розв'язуваної задачі. Компоненти (2), (4) обов'язкові, так як вони організовують апарат активізації правила рекурсії. Зазвичай компонента (1) - це предикати, які не впливають на рекурсію. Компонента (3) містить предикати, за допомогою яких формуються нові значення аргументів, які беруть участь у рекурсії, а (5) включає предикати, які формують за допомогою апарату рекурсії шукані значення. (5) - складання рішення. (2) - використовується для зупинки рекурсії, а (4) - реалізує повторний виклик рекурсивного правила для нових значень аргументу. У залежності від заданих граничних умов розрізняють спадну і висхідну рекурсію.

Приклад.

Визначення n-го терма послідовності 1, 1, 2, 6, 24, ...

N 0 1 2 3 4 ...

0 терм = 1 3 терм = 2 * 3

1 терм = 1 * 4 січні терм = 6 * 4

2 терм = 1 * 2 травня терм = 24 * 5

Для позначення того факту, що n-й член послідовності дорівнює V, вводиться предикат наступного виду: posl (N, V)

Фрагмент програми:

domains

N, V = integer

divdicates

posl = (N, V)

clauses

posl (0, 1)

posl (N, V) if

1) N> 0

2) M = N-1

3) posl (M, U)

4) V = U * N

goal

posl (3, x)

Рішення задачі проводиться в 2 етапи:

I етап.

1. Спроба задовольнити запит користувача, використовуючи перше твердження в розділі clauses (posl (3, x) зіставляється з posl (0, 1)). Так як 0 не зіставляється з 3, то спроба завершується невдачею. Після цього posl (3, x) зіставляється із заголовком 2-го затвердження posl (N, V). Звідси N отримує значення 3, а V зв'язується з х і система переходить до доказу підцілі в тілі правила:

1) N> 0 узгоджується при N1 = 3

2) M1 = N1-3 узгоджується при N1 = 3 і M1 = 2

3) posl (2, U1) призводить до другого рекурсивному поводження і так як це звернення не узгоджено з першим, то останнє твердження (V = U * N) відкладається.

2. Узгодження posl (2, U1) з posl (0, 1) призводить до невдачі. Відбувається зіставлення з заголовком 2-го твердження, що закінчується успіхом, при цьому N2 = 2 і V = U1. відбувається доказ за метою цього твердження:

1) узгоджується при N2 = 2

2) узгоджується при N2 = 2 і М2 = 1

3) posl (1, U2) призводить до повторного рекурсивному зверненням

4) відкладається

3. Узгодження posl (1, U2) з posl (0, 1) призводить до невдачі. Зіставлення із заголовком 2-го затвердження закінчується невдачею, при N3 = 1 і V = U2. Відбувається доказ за метою цього твердження:

1) узгоджується при N3 = 1

2) узгоджується при N3 = 1 і М3 = 0

3) posl (0, N3) призводить до повторного рекурсивному зверненням.

Отримане цільове твердження зіставляється з першим цільовим твердженням posl (0, 1), при цьому U3 отримує заначеніямі 1.

На цьому етап розбиття закінчується.

II. Етап складання рішення.

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

1) U2 = U3 * 1, так як U3 = 1 то U2 = 1

2) U1 = U2 * 2 U1 = 2

3) X = U1 * 3 X = 6

2. Повернення і відсікання.

У процесі реалізації запиту інтерпретатору мови необхідно аналізувати безліч фактів і правил, к-які витягуються в процесі декількох переглядів відповідних баз фактів. При цьому в процесі одного перегляду формується часткове вирішення. Процес в PROLOGе виконується автоматично шляхом позначки або заповнення тих модулів, к-які аналізувалися перед поточної метою, з тим, щоб виключити отримане приватне рішення з дальнейнего розгляду. Цей механізм у PROLOGе наз-ся поверненням і реалізується через використання стандартного предиката fail, к-рий завжди має значення "брехня". Цей предикат змушує інтерпретатор проаналізувати ще раз базу фактів, щоб виконати більше цільове твердження для інших значень змінних. Він дозволяє отримати в базі всі можливі рішення.

ПРИКЛАД:

domains

p, T = symbo L

divdicat s

like (P, T)

poleg (T)

dauses

like ("Іванов", "пиво").

like ("Іванов", "сік").

poleg ("cok ")...

otv if

like (P, T) and

poleg (T), nl,

write (P),

fail.

goal

otv.

Для управління процесом виконання програм у PROLOG є вбудований предікей cut, кіт. кодується в turbo-PROLOG як!. Основне призначення - зупинка процесу повернення, тобто припинення вироблення подальших рішень.

Цей процес у Пролозі зв. ВІДСІКАННЯМ. Найчастіше предікей cut використовується спільно з fail.

ПРИКЛАД

.

.

.

goal

like (P, T)

T = "кефір",

nl,

write ("любитель кефіру знайдений")

!.

fail

Відсікання використовується для усунення нескінченних циклів (див. перед. Приклад):

clauses

posl (0,1) if!

posl (N, V) if

M = N-1

posl (M, U)

V = U * N

Відсікання також використовується для пристрої. взаємовиключних тверджень.

ПРИКЛАД

ball (M, 'A ") if M> so,!

ball (M, "B") if M <so an M> 60,!.

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Реферат
20.6кб. | скачати


Схожі роботи:
Мова логічного програмування Visual Prolog
Логічні задачі на мові програмування Prolog
Безпека застосування ПЕОМ
Склад та функціонування ПЕОМ
Хвороби при роботі на ПЕОМ
Оцінка робочого місця оператора ПЕОМ
Охорона праці при роботі з ПЕОМ
Розрахунок собівартості блоку живлення ПЕОМ
Перевірочний розрахунок на міцність зубчастих передач на ПЕОМ
© Усі права захищені
написати до нас