Когда Пролог ломает линии? - PullRequest
1 голос
/ 21 июня 2019

Рассмотрим следующий пример программы на Прологе:

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 ломает границы, а когда нет? От чего это зависит?

1 Ответ

2 голосов
/ 30 июня 2019

Все привязки (Var = Value) отображаются в отдельной строке, кроме случаев, когда две или более переменных связаны с одним и тем же значением. В этом случае он использует следующий синтаксис в одной строке.

V1 = V2, V2 = V3, ..., Vn-1 = Vn, Vn = value.

Это происходит потому, что важно знать, что две переменные имеют одинаковое значение. Ответ в SWI-Prolog печатается как действительная программа Prolog. Больше никаких обещаний нет, и макет, порядок и т. Д. Могут меняться без уведомления между версиями. Если вы хотите, чтобы машина считывала результаты, не используйте верхний уровень.

...