Приклад використання методів відкат після невдачі (ОПН) і відсікання і відкат (оо) на мові prolog,

Робочий простий приклад використання методів "відсікання і відкату" і "відкату після невдачі" для організації циклів на мові Пролог:

% Даний приклад ілюструє як отримати безліч можливих рішень.
% Використовуються методи: відкат після невдачі (ОПН) і відсікання і відкат (ГО)


% Мета завдання: отримати різні списки дітей

predicates
nondeterm child (symbol, symbol)

all_childs
all_childs_Alisa
all_childs_before_Diana
first_child_Alisa

clauses
% База дітей
child ( "Тимур", "Козлов").
child ( "Аліса", "Попова").
child ( "Женя", "Кузнєцова").
child ( "Оля", "Фролова").
child ( "Аліса", "Шапочкина").
child ( "Петро", "Іванов").
child ( "Аліса", "Рубльова").


% Список всіх дітей - Метод відкату після невдачі (ОПН)
all_childs: - child (X, Y), write (X, "", Y), nl, fail.

% Список всіх дітей з ім'ям Аліса - Метод відкату після невдачі (ОПН)
all_childs_Alisa: - child (X, Y), X = "Аліса", write (X, Y), nl, fail.


% Список всіх дітей до Діани включно - Метод відсікання і відкату (ГО)
all_childs_before_Diana: - child (X, Y), write (X, Y), nl, X = "Діана".

% Перша дитина з ім'ям Аліса - Метод відсікання і відкату (ГО)
first_child_Alisa: - child (X, Y), X = "Аліса", write (X, Y), nl.

goal
% Write ( "Список всіх дітей:"), nl, all_childs.
% Write ( "Список дітей з ім'ям Аліса:"), nl, all_childs_Alisa.
% Write ( "Список всіх дітей до Діани включно:"), nl, all_childs_before_Diana.
write ( "Перша дитина з ім'ям Аліса:"), nl, first_child_Alisa.


Знак оклику в пролозі (так званий оператор відсікання), якщо пояснювати на пальцях, працює приблизно так: якщо сталося виконання команди "!", То навіть якщо в викликаних раніше правилах були інші варіанти вирішення для розгляду - відкат до цього правила все одно не буде виконаний. Ми заборонили відкат і пошук інших варіантів рішення.

Більше (А, 3): - А<3.
Більше (А, 5): - А<5.
Більше (А, 8): - А<8.

Goal більше (4, число).

Видасть відповідь: число = 5.

Хоча було два варіанти відповіді: 4 і 8. Але до перевірки останнього правила ми не дійшли, тому що в правилі "Більше (А, 5): - А<5. " запретил нам откатываться к предыдущим правилам своим восклицательным знаком, на который Пролог наткнулись, когда нашёл решение "число=5".

Сам заплутався в тому, що написав, але зрозуміло і швидко пояснити складно))