Page 31 - 4800
P. 31

Використовуючи  це  відношення,  можна  сформувати  базу  даних  по
                  транспортних магістралях, з допомогою якої можна виконувати пошук маршруту між
                  двома заданими містами і визначення відстані між ними. Таким чином, постає задача
                  розробки процедури формування нового відношення
                         Шлях(Місто_1, Місто_2, Довжина_шляху),
                  на основі вихідного відношення  “дорога”. Метод рекурсії, що використовувався при
                  складанні процедури “предок” можна застосувати і в цьому випадку.
                         /* програма 3.2 */
                  domains
                         town = string
                         distance = integer
                  predicates
                         road(town, town, distance)
                         route(town,town,distance)
                  clauses
                         road(„Івано-Франківськ”, ”Львів”, 135).
                         road(„Івано-Франківськ”, „Тернопіль”, 137).
                         rоаd(„Луцьк”, „Львів”, 152).
                         road(„Луцьк”, „Тернопіль”, 163).
                         rоаd(„Львів”, „Тернопіль”, 127).
                         route(Town1, Town2, Distance):-road(Town1 ,Town2, Distance).
                         route(Town1,  Town2,  Distance):-road(Town1,  X,  Dist1),  route(X,  Town2,  Dist2),
                  Distance=Dist1+Dist2, !.
                         У  процедурі  route() відношення між  двома містами буде дотримуватися, якщо
                  існує  дорога,  якою  можна  добратися  з  одного  міста  в  іншій  через  ряд  населених
                  пунктів. Кожна пропозиція для предиката road() описує дорогу з одного міста в іншій,
                  що має визначену відстань.
                         Правила процедури route() указують на можливість як прямого маршруту, так і
                  маршруту через інші міста. Предикат route() визначений рекурсивно.
                         Якщо маршрут містить тільки одну ділянку дороги, то в цьому випадку відстань
                  між містами дорівнює довжині цієї ділянки.
                         У випадку, якщо маршрут з Міста_1 у Місто_2 є сумою маршрутів з Міста_1 у
                  Х і з Х в Місто_2, то відстань між Містом_1 і Містом_2 буде дорівнює відстані між
                  Містом_1 і Х плюс відстань між Містом_2 і X, тобто сумі двох відстаней.
                         Друге  правило  є  рекурсивним.  Відношення,  записане  в  заголовку  правила,
                  залежить від більш простої версії самого себе. Перше правило визначає граничну умова
                  виходу з рекурсії. Як тільки воно стане істинним, то процес рекурсії припинитися.


                                                      Луцьк
                                                                      163

                                                       152                  Тернопіль
                                                                127

                                                 Львів                   137
                                                              135
                                                                      Івано-
                                                                    Франківськ

                                     Рисунок 3.3 – Симетричне транзитивне відношення
                         Дана  програма  не  здатна  врахувати  всі  можливі  комбінації  початкових  і
                  кінцевих  точок  маршрутів,  тому  що  при  формуванні  процедури  не  враховані
                  обмеження, що забезпечують цілісність відношень.









                                                              31
   26   27   28   29   30   31   32   33   34   35   36