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
   6   7   8   9   10   11   12   13   14   15   16