Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компютерні системи штучного інтелекту_методичні...doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
521.73 Кб
Скачать

2.1. Програма роботи та завдання.

2.1.1. Створити в середовищі Turbo Prolog програму подібну прикладу 1 та дослідити її.

2.1.2. Задати різні варіанти цілей та проаналізувати отримані результати.

2.1.3. Зафіксувати результати.

2.1.4. Дослідити програму прикладу 2 з подальшою модифікацією за вибором студента.

2.1.5. Зафіксувати у звіті вихідні коди створених програм та логіку їх роботи.

2.1.6. Відповісти письмово на контрольні питання.

Контрольні питання:

1) Які операції можна виконувати над списками?

  1. Що таке список? Яку структуру він має?

  2. В чому полягає рекурсивна сутність списку?

Лабораторне заняття № 6

Тема: Дослідження ітерацій та рекурсій

Мета роботи. Дослідити реалізацію ітераційного процесу за допомогою бектрекінгу; застосування бектрекінгу до реалізації циклів; рекурсивну реалізацію визначення факторіала (декілька варіантів); проаналізувати отримані результати.

1. Теоретичні відомості

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

Часто при вирішенні конкретних задач буває необхідно переглядати всі можливі шляхи розв’язку задачі. Якщо розглянутий шлях не дає відповіді, необхідно переглянути альтер-нативний. Такий підхід дістав назву бектрекінг.

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

Пролог має два спеціальні предикати, які дозволяють контролювати механізм бектрекінгу: предикат fail, котрий примушує запускати механізм бектрекінгу, і cut (позначається !), який використовується для відміни бектрекінгу.

Пролог запускає бектрекінг, коли чергове співставлення завершується невдачею. Предикат fail виробляє значення “хибність”, що позначає невдачу і примушує спрацьовувати бектрекінг.

2. Практична частина

Приклад 1.

predicates

country(symbol)

print_countries

clauses

country(england).

country(france).

country(germany).

country(denmark).

print_countries :- country(X),

write(X), /* write the value of X */

nl, /* start a new line */

fail.

print_countries.

Приклад 2.

domains

i=real

n=integer

predicates

sum(n,i)

goal

write(“Input N”), nl,

readint(N),

sum(N,J), nl,

write(“J=”, J).

clauses

sum(1,1).

sum(N,J):-N>1, K=N-1, sum(K,L), J=L+(1/(N*N*N)).

Приклад 3.

predicates

repeat

typewriter

clauses

repeat.

repeat :- repeat.

typewriter :- repeat,

readchar(C),

write(C),

char_int(C,13).

Приклад 4.

predicates

factorial(integer, real)

clauses

factorial(1, 1) :- !.

factorial(X, FactX) :- Y = X-1,

factorial(Y, FactY),

FactX = X*FactY.

Приклад 5.

predicates

factorial(integer, real)

factorial_aux(integer,real, integer, real)

/* Числа більші за 32767 повинні бути описані як дійсні. */

clauses

factorial(N, FactN):- factorial_aux(N, FactN, 1, 1).

factorial_aux(N, FactN, I, P):- I <= N, !,

NewP = P * I,

NewI = I + 1,

factorial_aux(N, FactN, NewI, NewP).

factorial_aux(N, FactN, I, FactN) :- I > N.

Приклад 6.

predicates

factorial(integer,real)

factorial(integer, real,integer, real)

clauses

factorial(N,FactN):- factorial(N,FactN,1,1).

factorial(N, FactN, N, FactN):- !.

factorial(N, FactN, I,P):-NewI = I+1,

NewP = P*NewI,

factorial(N,FactN,NewI,NewP).