Page 11 - 4800
P. 11
Факт – це твердження про існування деякого відношення між аргументами, що
позначається ім'ям предиката. Факти – це фрази без умов і вони містять твердження, що
завжди абсолютно вірні. Форма запису фактів:
clauses
predicate_Name_1 (term_11, term_12,..., term_1k). ,
...
predicate_Name_N (term_N1, term_N2,..., term_NL).
де predicate_Name_1 – імена предикатів, описаних у секції predicates, a term_11, ...,
term_1k – аргументи предикатів (терми), кількість яких повинна відповідати арності
опису предиката. Наприклад, факти, що визначають відношення, задане предикатом
student, можуть мати вигляд:
clauses
student("Петров" ,4.5).
student("Сидоров" ,3.75).
Правила містять твердження, істинність яких залежить від деяких умов
(підцілей), що утворять тіло правила. У Пролозі правила представляються у вигляді
Заголовок :- Підціль_1 , Підціль_2 , ... , Підціль_N. ,
де позначення “:-“ читається як “якщо”, а Заголовок має таку ж форму, як і факт. Тіло
правила – це список підцілей, розділених комами. Кому розуміють як кон'юнкцію і
читають як “і”. Приклад запису правила
good_student(Name) :- student( Name , В ) ,В > 4.
Для того щоб заголовок правила виявився істинним, необхідно, щоб кожна
підціль, що входить у тіло правила, була істинною. Змінні в заголовку правила,
квантифіковані універсально. Це означає, що правило, заголовок якого містить змінні,
буде істинним для будь-яких термів, що відповідають підцілям правила. З іншої
сторони змінні, що входять тільки в тіло правила, квантифіковані екзістенціально.
Якщо врахувати таку квантифікацію, то наведене вище правило можна прочитати так:
Для будь-якої особи Name, Name є гарним студентом, ЯКЩО існує середній бал
В такий, що Name є студентом із середнім балом В і середній бал В більше 4.
Множина правил, заголовки яких містять однакові імена предикатів і кількість
аргументів, називаються процедурою. У Пролозі предикати визначаються
(реалізуються) за допомогою процедур. Так наступні два правила
max(Х, Y, X) :- Х >=Y.
max(Х, Y, Y) :- Х < Y.
реалізують процедуру знаходження найбільшого з двох чисел, обумовлену предикатом
виду max(number_1, number_2, max_number). Вважається, що між цими двома
правилами неявно присутній напевний сполучник “або”.
1.3.4 Секція goal
У секції goal задається внутрішня мета програми. Це дозволяє програмі
запускатися незалежно від середовища розробки. Якщо внутрішня мета включена в
програму, то Пролог виконує пошук тільки одного першого рішення, і зв'язані з
змінними значення не виводяться на екран, якщо не передбачити застосування
операторів виводу інформації.
У систему Пролог включене більш ніж 200 вбудованих стандартних предикатів і
більше дюжини стандартних доменів. У випадку використання цих предикатів і
доменів немає необхідності оголошувати їх у програмі.
Розглянемо приклад програми, у якій задана внутрішня мета і використовується
звертання до стандартних предикатів:
/* Програма 1.2 */
predicates
hello (string)
goal
hello (_).
clauses
hello (Name):- write("Please, type your name "), readln(Name), nl,
write("Welcome ", Name).
У цій програмі запитується Ваше ім'я, а потім воно виводиться на екран.
11