Рассмотрим следующий пример программы на Прологе:
p(0).
p(1).
b1(T) :-
T = tri(X, Y, Z), p(X), p(Y), c(T), !, p(Z).
c(tri(X, X, _Z)).
SWI Prolog дает некоторые интересные ответы на некоторые запросы: \
?- b1(tri(0, Y, Z)).
Y = Z, Z = 0 ;
Y = 0,
Z = 1.
Обратите внимание, что во втором ответе она была прервана, но не в первом.
Это заставляет меня задуматься, каковы точные правила перевода строк? Когда SWI Prolog ломает границы, а когда нет? От чего это зависит?