Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Использование надрезов (snip)




Надрез обозначается открывающей скобкой [! и закрывающей скобкой !]. Например, для правила

цель:- подцель1,[! подцель2,подцель3!],подцель4.

действие надреза распространяется на подцели подцель2 и подцель3, расположенные между этими двумя скобками.

Snip аналогичен cut, однако отличается от него тем, что если после бектрекинга управление передастся snip, весь предикат неуспешным не будет. Бектрекинг лишь "пропустит" те подцели, которые находятся внутри snip и продолжится для подцелей, которые расположены раньше snip [7].

Отличие надреза от отсечения:

Для cut если E неуспешна, бектрекинг попадает на cut и весь предикат A неуспешен, в отличие от ситуации со snip. Для snip, если подцель Е неуспешна, то бектрекинг попадает на подцель B.

Надрезы целесообразно использовать в случаях, когда нужно ограничить бектрекинг для исключения ненужного поиска, но отсечение не требуется.

УПРАЖНЕНИЕ. Вообще говоря, надрезы не реализованы в SWI-Prolog. Используя отсечение, реализуйте надрез (т.е. «заморозьте» точки возврата только для предикатов, которые должны быть внутри надреза). Одна из реализаций может быть представлена в виде схемы (по результату равносильна вышеприведённой схеме надреза):

A:-B, T, E.

T:-C, D,!.

 

b(2). %(1)

b(3). %(2)

c(2). %(3)

c(3). %(4)

d(4). %(5)

d(5). %(6)

e(10). %(7)

e(11). %(8)

e(12). %(9)

a(X,Y,Z,W):-b(X),[! c(Y), d (Z)!],e(W). %(10)

a(X,X,X,X):-d(X). %(11)

/* В SWI-Prolog надрез можно реализовать через

отсечение следующим образом: */

a(X,Y,Z,W):-b(X),f(Y,Z),e(W).

a(X,X,X,X):-d(X).

f(Y,Z):-C(Y),d(Z),!.

 

2?- a(X,Y,Z,W).

X = 2,Y = 2,Z = 4,W = 10; X = 2,Y = 2,Z = 4,W = 11;

X = 2,Y = 2,Z = 4,W = 12; X = 3,Y = 2,Z = 4,W = 10;

X = 3,Y = 2,Z = 4,W = 11; X = 3,Y = 2,Z = 4,W = 12;

X = 4,Y = 4,Z = 4,W = 4; X = 5,Y = 5,Z = 5,W = 5.

Как видно из примера надрез «замораживает» предикаты c(Y) и d(Z) в строке (10). Поэтому при получении вывода с использованием этой строки значения переменных Y, Z при поиске всех альтернативных решений не меняются – для c(Y) и d(Z) не ищется других альтернатив, кроме как c(2) и d(4) соответственно.





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 485 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Человек, которым вам суждено стать – это только тот человек, которым вы сами решите стать. © Ральф Уолдо Эмерсон
==> читать все изречения...

2316 - | 2171 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.