Разница, которая проявляется просто путем замены X = Y
на Y = X
, крайне маловероятна.
Пока вы рассматриваете синтаксическое объединение (с использованием проверки на наличие ошибок) или рациональное объединение деревьев, единственные различия могутбудут некоторые минимальные различия в производительности.
Более заметные различия проявляются при выходе за пределы этих четко определенных отношений:
- при смешивании обоих, объединение может не завершиться. Я могу привести лишь несколько связанных примеров в SWI:
.
?- X = s(X), unify_with_occurs_check(X, s(X)).
X = s(X).
?- unify_with_occurs_check(X, s(X)), X = s(X).
false.
Выше коммутативность целей нарушена. Но затем мы смешиваем две несовместимые теории друг с другом. Таким образом, мы не можем жаловаться.
?- Y = s(Y), unify_with_occurs_check(X-X,s(X)-Y).
false.
?- Y = s(Y), unify_with_occurs_check(X-X,Y-s(X)).
Y = X, X = s(X).
И здесь мы просто обмениваемся порядком аргументов. Общеизвестно, что обмен (последовательно) аргументами функтора не должен вызывать различий, но, хелас, и здесь несовместимая смесь является виновником.
- , когда задействованы ограничения и побочные эффекты. Тем не менее, я не могу представить такой случай, просто заменив
X = Y
на Y = X
.