Page 14 - 4800
P. 14
де символ „;” (крапка з комою) еквівалентний логічній операції „АБО” і в даному описі
використаний для того, щоб показати, що домен object може мати одну з можливих
структур, описаних для нього в області domains.
1.6 Процедури як елемент представлення знань
Зміст пропозицій Пролог-програм може бути зрозумілий або з позицій
декларативного підходу, або з позицій процедурного підходу. Декларативний зміст
підкреслює статичне існування відношень. Порядок проходження підцілей у правилі не
впливає на декларативний зміст цього правила.
При процедурному трактуванні програми підкреслюється послідовність кроків,
що виконуються при обробці запиту. У цьому випадку, набуває значення порядок
проходження підцілей у правилі.
Множини пропозицій, що мають те саме ім’я предиката з однаковою кількістю
аргументів, називають процедурою. Коли обробляється запит до процедури, то він
аналізує фрази, що утворять процедуру, в тому порядку, в якому вони в ній
представлені. Вважають, що між правилами процедури неявно присутній сполучник
„або”.
Раніше було сформовано два підходи до представлення наших знань про поняття
колега. З однієї сторони колегами є товариші по службі, тобто будь-яка пара осіб, що
працюють разом, з іншого боку – будь-яка пара осіб, що об’єднана об’єктом спільної
діяльності. Тепер ми підійшли до того, щоб два наші уявлення про поняття колега
об’єднати в одне.
Уявіть собі, що одне з формулювань якого-небудь поняття (у нашому випадку це
колега) ми одержали від одного експерта, що має свої знання цієї проблеми, а друге –
від експерта, що має інші знання цієї ж проблеми. Поєднуючи в Пролог-програмі два
визначення однієї і тієї ж проблеми, ми одержимо систему, що знає більше кожного
окремого експерта.
Поняття колеги, що задовольняє обом точкам зору, може бути описано
відношенням виду:
Повний_колега(Особа_1, Особа_2, Предмет_спільної_діяльності),
яке на Пролозі можна описати, наприклад, предикатом all_colleague, структура якого
буде цілком аналогічна структурі предикату unite, а визначити його можна у вигляді
процедури, що містить три декларації предикату all_colleague.
predicates
all_colleague(name, name, object)
clauses
all_colleague(X, Y, Z):- colleague(X, Y), Z=labour.
all_colleague(X, Y, Z):- unite(X, Y, Z).
all_colleague(X, Y. Z):- unite(Y, X, Z).
З декларативної точки зору цей опис процедури повний_колега можна прочитати
так.
Для будь-яких двох осіб X і Y і будь-якої загальної діяльності Z X і Y є колегами
за спільною діяльністю Z
ЯКЩО
X і Y є товаришами по службі
І
загальна їхня діяльність Z – це праця
АБО X поєднує з Y спільна діяльність Z
АБО Y поєднує з X спільна діяльність Z
Останнє правило усуває асиметрію відношення unite стосовно осіб, об’єднаних
спільною діяльністю. Дійсно, якщо Козлов є колегою Петренка по роботі, то, мабуть,
що і Петренко є колегою Козлова по роботі.
1.7 Цілісність і несуперечність баз даних і знань
В Козлова тільки один колега – Петренко, зв’язаний з ним спільною працею.
Разом з тим у Петренка крім Козлова є ще два колеги, що зв'язані з ним спільною
працею. Але з цих двох посилань і наших представлень про поняття колеги стає
14