Имеет ли значение последовательность терминов объединения? - PullRequest
1 голос
/ 02 ноября 2019

Давайте рассмотрим, у меня есть два члена T1 и T2. Я объединил два условия и получил результат.

Мой вопрос: если я поменяю местами термины и унифицирую термины T2 и T1 - будет ли результат одинаковым или разным?

Я попытался изменить условия и получил тот же результат. Но в теории я могу прочитать: в Прологе важна последовательность.

Так как вы думаете - результат одинаков или отличается и почему?

1 Ответ

2 голосов
/ 02 ноября 2019

Разница, которая проявляется просто путем замены 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...