Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекц по Visual Prolog.doc
Скачиваний:
4
Добавлен:
02.05.2019
Размер:
937.47 Кб
Скачать

4.4.4. Предикат repeат

Організувати дії, що повторюються можна за допомогою рекурсивного предикату Repeat.

Означення предикату має вид:

Repeat .

Repeat :- Repeat .

Предикат використовують в таких процедурах, де немає предикатів з декількома розв’язками, проте необхідно повторювати дії за допомогою механізму звороту.

Приклад: Написати програму, що обчислює корінь квадратний для кожного введеного числа.

Predicates

Repeat

Do

Control (integer)

Goal

Do.

Clauses

Repeat.

Repeat :- Repeat.

Do:- repeat, readint(N), control(N).

Сontrol (N):- N=0;

K= sqrt (N), write (K), nl, fail.

Кожний раз після обчислення коріння механізм звороту повертає керування на предикат Repeat. Предикат може пере узгоджуватися скільки – завгодно раз, бо компілятор перетворює просту рекурсію на ітерацію. Програма закінчить свою роботу по вводу 0.

Предикат Repeat невідомий Прологу, тому програміст повинен сам дати означення предикату. Предикат не зобов’язаний мати вказане ім’я.

Наприклад: Clauses

r.

r :- r.

      1. Міркування про те, як треба писати програму

Програму на Пролозі пишуть за таким планом:

  1. Описати факти, які подано у завданні.

Для цього треба:

  • Визначити об’єкти і відношення між об’єктами.

  • Визначити за мнемонікою функтор предиката для факту і типи даних для аргументів предикату.

  1. З'ясувати, що потрібно знайти в завданні, і які для цього потрібні укрупнені дії.

  2. Визначити предикат для кожної дії.

Для цього треба:

  • Визначити функтори предикатів.

  • Визначити для кожного предикату вхідні і вихідні дані.

4. Визначити метод рекурсії для повторюваних операцій у кожному предикаті. Використовуйте механізм звороту там, де це можливо.

  1. При написанні програми треба визначити призначення кожного правила і факту, призначення гілок правил.

5. Обробка рядків

5.1. Загальні відомості

У Пролозі розглядаються типи: String для рядків та Symbol для ідентифікаторів.

Об’єкти даних доменів String та Symbol містять дані і методи, які працюють з цими даними. Тобто для рядків існують ряд стандартних предикатів - методів, які оброблюють дані цих доменів.

Типи String та Symbol сумісні і автоматично перетворюються друг в друга, якщо довжина рядку String не виходить за дозволену для рядку типу Symbol. Пролог дозволяє працювати з рядками типа string довжиною <= 64 КБ.

Рядок типу String може містити між лапками будь-які символи. Наприклад, ”Пролог V 2.0”.

Завдяки використанню керуючого символу ”\” всередині рядка типу String, можна записувати коди символів, будь-які керуючі символи. Наприклад, “\65\13”. Символи “\n” переводять курсор в начало наступного рядку.

Рядок типу Symbol записується за правилами запису ідентифікатора. Рядок записується без лапок, починається з маленької англійської букви чи підкреслення містить англійські букви, цифри та підкреслення. Довжина рядку типу symbol <= 250.

Використання констант типу String робить Exe.програми великими. Скільки раз константа зустрічається в програмі, стільки разів вона резервується в пам'яті. Тип Symbol – зберігається як рядок таблиці і Пролог звертається до цього рядка за індексом. У таблиці рядок зберігається один раз.

В Пролозі типи String і Symbol не сумісні з типом Char.