predicates
x(integer)
clauses
x(1):-
!,
write(“a, b, c”),nl.
x(2):-
!,
write(“c”),nl.
x(_):-
Write(“ изучаем предикат cut.”).
Предикат сut позволяет сделать процедуру детерминированной.
Предикат cut предотвращает поиск с возвратом к следующим предложениям. Это отменяет точки отката, увеличивая эффективность выполнения программы. Конструкция очень похожа на switch(case).Для каждой цели существует своя веточка, которая единственная и будет работать при совпадении цели с головой именно этой веточки.
Обратите внимание: условие проверки записывается в заголовке правила(x(1), x(2) и так далее, а не в теле: x(Y):- Y=1,!,a, b, c.)- это увеличивает эффективность работы программы и упрощает чтение.
Использование зеленых и красных отсечений
Отсечения бывают зеленыеи красные.
Листинг 5.5. Использования зеленого отсечения в
Задаче нахождения минимума двух чисел
predicates
minimum(real,real,real)
clauses
minimum(X,Y,X):-
X<=Y,!.
minimum(X,Y,Y):-
X >Y,!.
goal: minimum(3,5,Min)
Min=3
goal: minimum(6,5,Min)
Min=5
-При выполнении одной арифметической проверки оказывается невозможным выполнение другой проверки. Отсечение, содержащееся в этой программе, отображает детерминированный характер ее. Это значит, что для каждой доказуемой цели к ее доказательству ведет применение лишь одного правила программы. Отсечение фиксирует выбор такого правила.
-Отбрасывает часть пространства поиска. Сведения, зафиксированные при отсечении, используются для сокращения дерева поиска, что уменьшает выполняемый путь обхода дерева и экономит время выполнения программы а также уменьшает объем используемой памяти.
Здесь имели место зеленые отсечения, то есть такие, добавление которых в программу не влияло на декларативный ее характер (Можно найти все решения, убирая заведомо лишние части дерева, которые все равно бы не привели к новым решениям. Удаление зеленого отсечения также не влияет на решения программы)
Замечание: программы с отсечением менее гибкие, чем без отсечения. Но если предполагается использовать программу только одним способом, то это не существенно.