Логическое программирование на языке Visual Prolog. Солдатова О.П - 41 стр.

UptoLike

41
decimal (8).
decimal (9).
write_decimal:- decimal (C), write (C), nl, make_cut (C).
make_cut (C):-C=5.
goal
write_decimal.
Предикат ! используется для того, чтобы выполнить отсечение в
указанном месте. Неуспешное выполнение предиката make_cut порождает
предикат fail, который используется для возврата и доступа к цифрам до
тех пор, пока цифра не будет равна 5.
Пример 38: необходимо выдать из БД первую цифру, равную 5.
domains
d=integer
predicates
decimal (d)
write_decimal
clauses
decimal (0).
decimal (5).
decimal (2).
decimal (3).
decimal (4).
decimal (5).
decimal (6).
decimal (5).
decimal (8).
decimal (9).
write_decimal:- decimal (C), С=5, write (C), nl, !.
goal
write_decimal.
Если из тела правила убрать предикат !, то будут найдены все три
цифры 5, что является результатом применения метода возврата после
неудачи. При внесении отсечения будет выдана единственная цифра 5.
2.12.3 Метод повтора, использующий бесконечный цикл
Вид правила повторения, порождающего бесконечный цикл:
repeat.
repeat:- repeat.
Первый repeat является предложением, объявляющим предикат repeat
истинным. Однако, поскольку имеется еще один
вариант для данного
предложения, то указатель возврата устанавливается на первый repeat.
Второй repeatэто правило, которое использует само себя как компоненту
(третий repeat). Второй repeat вызывает третий repeat, и этот вызов
вычисляется успешно, так как первый repeat удовлетворяет подцели repeat.