У меня есть эти статьи:Пролог оператор покрой поведение
a(1).
a(2).
b(a).
c(A,B,C) :- a(A),d(B,C).
c(A,B,C) :- b(A),d(B,C).
d(B,C) :- a(B),!,a(C).
d(B,_) :- b(B).
При запуске запроса с (X, Y, Z) ответы:
X = 1, Y = 1, Z = 1 ;
X = 1, Y = 1, Z = 2 ;
X = 2, Y = 1, Z = 1 ;
X = 2, Y = 1, Z = 2 ;
X = a, Y = 1, Z = 1 ;
X = a, Y = 1, Z = 2.
Так в основном, оператор покрой (здесь (B, C): - a (B),!, a (C).) игнорирует самые последние точки выбора, т. е. не выполняет дальнейший поиск d() и a(). Я, хотя это сокращение игнорирует ВСЕ предыдущие пункты выбора и не будет делать никакого возврата.
Может кто-нибудь объяснить точное поведение и почему я не прав?