ВУЗ:
Составители:
Рубрика:
45
check(Z):-Z>=0.
check(Z):-Z<0.
goal
nl, count3(0).
Здесь тоже есть непроверенная альтернатива до вызова рекурсивного
предиката (предикат check). Случаи в примерах 44 и 45 хуже, чем в примере
42, так как они генерируют точки возврата.
Очень просто сделать рекурсивный вызов последним в правой части
правила, но как избежать альтернатив? Для этого следует использовать
предикат отсечения, который предотвращает
возвраты в точки, левее
предиката отсечения. Модифицируем 44 и 45 примеры так, чтобы была
хвостовая рекурсия.
Пример 46: рекурсивный счетчик из примера 41 с хвостовой рекурсией.
count4(100).
count4(N):-N>0,!,write(N),N1=N+1,count4(N1).
count4(N):- write(“N – отрицательное число“).
goal
nl, count4(0).
Пример 47: рекурсивный счетчик из примера 42 с хвостовой рекурсией.
count5(100).
count5(N):-write(N),N1=N+1 check(N1),!, count5(N1).
check(Z):-Z>=0.
check(Z):-Z<0.
goal
nl, count5(0).
2.14 Создание динамических баз данных
В Прологе существуют специальные средства для организации
внутренних и внешних баз
данных. Эти средства рассчитаны на работу с
реляционными базами данных. Внутренние подпрограммы унификации
осуществляют автоматическую выборку фактов из внутренней
(динамической) базы данных с нужными значениями известных параметров
и присваивают значения неопределенным параметрам.
Раздел программы facts в Visual Prolog предназначен для описания
предикатов динамической (внутренней) базы данных. База данных
называется динамической, так
как во время работы программы из нее можно
удалять любые факты, а также добавлять новые факты. В этом состоит ее
отличие от статических баз данных, где факты являются частью кода
программы и не могут быть изменены во время исполнения.
Иногда бывает полезно иметь часть информации базы данных в виде
фактов статической
БД - эти данные заносятся в динамическую БД сразу
после активизации программы. В общем случае, предикаты статической БД
имеют другое имя, но ту же самую форму представления данных, что и
предикаты динамической БД. Добавление латинской буквы d к имени
Страницы
- « первая
- ‹ предыдущая
- …
- 43
- 44
- 45
- 46
- 47
- …
- следующая ›
- последняя »