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

3.4. Терми

Будь-який елемент програми на Пролозі називають термом. До термів відносять: змінні, константи, об’єкти, функтори, предикати.

3.4.1. Константа

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

Неіменовані константи записуються прямо у виразі в програмі.

Наприклад, Col (X, Y):- Y=X+10 , де 10 не іменована константа.

Іменовані константи записуються в секції Constants.

Тип константи визначається з форми її запису.

Наприклад: Constants

N=14.

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

Константи можуть бути стандартними. Стандартні константи використовують стандартні предикати.

      1. ЗМІННА

Змінна може змінювати своє значення під час роботи програми. Тобто змінна може набувати будь-яких значень, визначених контекстом програми.

Проводжуючи аналогію між твердженням на Пролозі і реченням на природній мові, можна сказати, що змінній в твердженні на Пролозі відповідає займенник в реченні на природній мові. Значення займенника теж визначається контекстом речення. Наприклад: Книгу „Господар обручок” написав Р. Толкієн. Він був професором університету. Займенником „Він” означає Р. Толкієн.

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

Щоб відрізняти змінну від константи, змінну пишуть з великої букви.

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

Тип змінної визначається в предикаті користувача або закріплено в стандартному предикаті, в якому вона використовують.

Змінна може бути вільною або конкретизованою значенням. Розглянемо приклад програми, де є змінні вказаних доменів.

Завдання: Вивести на екран прізвище студента з № залікової книжки 2034.

Predicates

reader (string, integer )

do (string, int

Goal

Do (F, 2034), write(F).

Clauses

reader (“Іванов”,1567).

reader (“Петров”,2034).

do (F,K):-reader (F,K).

Змінна F, що задається в цілі вільна на початку роботи програми. Область її дії тільки цільове твердження. Вона має тип string, як вказано в об’яві предикату do для першого аргументу. Другий аргумент предикату константа типу integer - 2034.

Область дії змінних F та К з правила тільки правило. Ці змінні теж вільні на початку роботи програми. Типи змінних F та К з правила визначаються описом предикату do з секції Predicates.

Кожна з локальних змінних розташовується у стеку і існує тільки під час роботи з твердженням. Зв’язок між твердженнями встановлюється під час співставлення цілі і голови правила(умовного твердження) або цілі і факту.

Зіставлення предикату do з цілі із предикатом do із правила, встановлює зв'язок між відповідними вільними змінними і конкретизує змінну К числом 2034.

F цілі --- F правила

2034 цілі --- K правила

При зіставленні константи і вільної змінної, вільна змінна конкретизується константою.

При зіставленні вільних змінних вони зчіплюються. Це зчеплення тримається доти, доки одна зі змінних у ланцюжку не буде конкретизована. Як тільки одна змінна в ланцюжку конкретизується, конкретизуються й інші змінні в цьому ланцюжку.

Взагалі конкретизація змінної виконується в двох випадках:

  • При зіставленні предикатів різних тверджень.

  • При використанні предикату “=”.

Предикат „=”

Предикат „=” працює в двох режимах:

  • для привласнювання змінній значення;

  • для порівняння значень виразів.

Приклад використання предикату „=” для привласнювання.

Завдання: Збільшити число 105 на 1 і результат вивести на екран.

Goal

Go (105).

Clauses

Go (K):- К1 = К+1, write(K1). , де К1- вільна перемінна, а К конкретизована змінна.

Приклад використання предикату для порівняння значень виразу. Завдання: Ввести з клавіатури число. Перевірити, чи дорівнює воно 16*2.

Goal

Readln(N),Go(16,N).

Clauses

Go(K, K1):- K1 = K * 2, write(“Дорівнює”). , де К і К1 конкретизовані змінні.