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

Запам'ятовування списку відвіданих місць

Для цього необхідно вести список місць, де ми вже побували, і перед рухом уперед перевірити наявність пункту, в який хочемо ступити, у списку відвіданих місць.

4.7. Списки

4.7.1. Подання й зображення списків

Список – це структура, що широко застосовується у нечисловому програмуванні. Список – послідовність, складена з довільної кількості елементів. Список може бути порожнім чи непорожнім. Порожній список у ПРОЛОЗі зображується атомом [ ]. Непорожній список можна розглядати як структуру, що складається з двох частин:

1) голова списку – перший елемент;

2) хвіст списку – список без голови.

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

Наприклад. Список того, що полюбляє Марія можна записати у вигляді

[персики, яблука, апельсини]

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

.(Голова, Хвіст)

Наведений вище список можна переписати у вигляді структури з функтором “.” таким чином:

.(персики, .(яблука, .(апельсини, [ ])))

Подання списків за допомогою квадратних дужок альтернативне й підкреслює важливу роль, що відведена спискам при програмуванні мовою ПРОЛОГ. Будь-яка структура в ПРОЛОЗі зберігається в базі знань у вигляді дерева, тому що єдиний спосіб зображення списків – деревоподібний (рис. 12).

.

персики .

яблука .

апельсини [ ]

Рис. 12. Зображення списку у вигляді дерева

На практиці зручно трактувати голову і хвіст списку як самостійні об'єкти.

Наприклад, список того, що полюбляє Марія можна розділити на Перше й Інші в такий спосіб:

Нехай L = [персики, яблука, апельсини]. Якщо Перше = персики, а Інші = [яблука, апельсини], То буде справедливо

L = [Перше | Інші].

Тут символ “|” відокремлює будь-яку кількість елементів на початку списку від хвоста списку.

Можна визначити свої власні види списків, якщо задати свій атом кінця й функтор для з'єднання голови списку з хвостом.

Наприклад:

потім(устати, потім(умитися, потім(попрацювати, потім(лягти_спати, нічого_не_робити).

Тут застосовується визначена користувачем структура, подібна до вбудованого списку з функтором “крапка”, що як закінчення використовує атом “нічого_не_робити”, а для з'єднання голови списку з хвостом використовує функтор “потім”. У деяких реалізаціях ПРОЛОГу бінарний функтор можна визначити як бінарний інфіксний оператор. Тоді приведений вище список можна подати у вигляді:

устати потім умитися потім попрацювати потім лягти_спати потім нічого_не_робити.

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