Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / Библиотека / ЛЕКЦИИ / POSIBNIK / ПРОГР НА ПРОЛОГЕ.doc
Скачиваний:
42
Добавлен:
23.03.2015
Размер:
669.7 Кб
Скачать

1. Основи мови програмування пролог

1.1. Основні поняття

Програма на ПРОЛОЗі складається з тверджень. Кожне твердження повинне закінчуватися крапкою. Твердження бувають двох виглядів:

  • факти - твердження не потребуючі доказу;

  • правила.

Правило має голову й тіло. Правило вважається доведеним, якщо доведені всі твердження, що входять до його тіла. Доказ істинності цілі здійснюється за допомогою вбудованого в систему правила виведення нових тверджень на основі поставленої цілі й бази знань (програми). Правило виведення, застосоване в ПРОЛОЗі, називається методом резолюцій. Цей метод був уперше запропонований Дж. Робінсоном у 1965 р. Він оснований на доведенні від супротивного і став тією базою, що дозволила автоматизувати доведення цілі в численні висловлень 1-го порядку.

Методом розробки програм на ПРОЛОЗі слугує метод поступового нарощування. Тобто спочатку розробляється якась спрощена схема предметної області. У процесі подальшої роботи в систему додаються все нові й нові відношення, що точніше описують предметну область. Але в будь-який момент можна задавати цілі програмі й одержати на них відповіді, основані на тих знаннях, що вже закладені в програму.

Наприклад, відомо, що:

“Марія любить яблука.” і

“Тетяна любить те саме, що й Марія.”

На основі цих тверджень, використовуючи логічні міркування можна укласти, що “Тетяна любить яблука”.

У цьому прикладі:

  • Марія, Тетяна, яблука - це об'єкти;

  • любить – це відношення арності 2 між двома об'єктами (тому що в нього два операнди).

Спосіб запису відношення “Марія любить яблука “ є інфіксний (оператор відношення “любить” знаходиться між об'єктами), бінарний (беруть участь два об'єкти), несиметричний (не можна замінити порядок входження операндів у відношення). Перша фраза являє собою приклад фактуального знання – мова йде про конкретні екземпляри об'єктів (Марія і яблука), що знаходяться в конкретному відношенні (любить). Якщо Марія також любить персики й горішки, то це можна виразити у вигляді окремих екземплярів цього відношення:

Марія любить персики.

Марія любить горішки.

А всі ці екземпляри відношення утворюють плоску таблицю:

Таблиця для відношення “любить”

Хто (любить)

Що (любить)

Марія

Яблука

Марія

Персики

Марія

Горішки

Відношення, подане у вигляді фактуальных знань, слугує прикладом скінченої функції (таблично заданої функції).

Це відношення в синтаксисі ПРОЛОГу запишуться в такий спосіб:

любить(марія, яблука).

любить(марія, персики).

любить(марія, горішки).

З погляду ПРОЛОГу “любить” - це предикат (оператор ПРОЛОГу), а “марія”, “яблука”, “персики” й “горішки” – це атоми, тобто окремі сутності, що мають у програмі такі позначення. Атоми в ПРОЛОЗі пишуться з малої літери (щоб їх відрізняти від змінних). З погляду ПРОЛОГу “любить” - це головний функтор відношення. Функтор характеризується ім'ям і арністю. Два функтори з тим самим ім'ям, але різною арністю являють собою два різних відношення. Наприклад, двовимірна й тривимірна крапки – це різні функтори:

крапка(3, 5).

крапка(7, -2, 4).

Друге твердження (“Тетяна любить те саме, що й Марія.”) являє собою приклад концептульного знання, тобто справедливого для різних значень змінних, що входять до його визначення. Ми нічого не зможемо сказати про те, що подобається Тетяні, поки не з'ясуємо, що ж любить Марія. І якщо ми знаємо, що Марія любить і яблука, і персики, і горішки, то те саме можемо сказати й про Тетяну. Дане твердження можна перефразувати в такий спосіб:

“Тетяна любить Це, якщо Марія любить Це”.

Тут “Це” є займенник (тобто займенник в українській мові може виступати на місці конкретного імені в реченні). Слово ”якщо” – зв'язка, що поєднує два твердження. Мовою ПРОЛОГ цю фразу можна записати так:

любить(тетяна, Це):-

любить(марія, Це).

Як бачимо, зв'язка ”якщо” мовою ПРОЛОГ записується за допомогою знаків “:-“. Займенник “Це” в ПРОЛОЗі перетворюється на змінну. Змінні в ПРОЛОЗі обов'язково пишуться з великої літери. От чому ми пишемо імена Марія і Тетяна з малої літери, в противному разі слід їх узяти у лапки:

любить(“Тетяна”, Це):-

любить(“Марія”, Це).

Змінна в ПРОЛОЗі служить для тимчасового іменування об'єктів у межах одного твердження, тобто від заголовка твердження до крапки, що закінчує твердження. Змінна в ПРОЛОЗі може перебувати в одному з трьох станів:

- вільна (неконкретизована);

- конкретизована якимсь об'єктом;

- зчеплена з іншою змінною.

Зчеплені змінні можуть бути або обидві вільні, або обидві конкретизовані тим самим об'єктом. Після того як змінна сконкретизована яким-небудь об'єктом, її конкретизація в межах даного твердження не може бути змінена (а значить і взагалі, тому що областю дії змінної є одне твердження). Тому конструкція виду

X = X + 1

в ПРОЛОЗі є безглузда. Якщо ми хочемо що-небудь змінити, то треба ввести іншу змінну і вже з її допомогою запам'ятати нове значення

X1 = X + 1.

Іншим наслідком цього постає те, що змінна, яка зустрічається у твердженні тільки один раз, не має сенсу (її значення ніколи не буде використане). Такі змінні прийнято позначати за допомогою знака “_” і вони називаються анонімними.