Я не могу понять поведение swi-пролога, когда база данных
включена (a, b).
запрашивается с
: - включено (A, B), включено (C, D).
Насколько я понимаю, что должно произойти, так это следующее: во-первых, самая левая цель в запросе сопоставляется с базой данных. Это сразу же происходит успешно, что приводит к удалению указанной цели из запроса, а также к замене
[A = a, B = b]
Далее замена применяется к оставшейся цели, которая ничего не делает, так как ни A, ни B не появляются во второй цели. Теперь оставшаяся цель сопоставляется с базой данных, что снова успешно. Теперь мы закончили, и мы должны остаться с заменой
[A = a, B = b, C = a, D = b]
И это должна быть единственной заменой, которую может придумать переводчик, при условии, что мое понимание прологической процедурной семантики является правильным. К сожалению, swi-пролог думает иначе. Вместо этого он предлагает замену
[A = C, B = D, C = a, D = b]
Если вы очень щедры, Вы могли бы сказать, что «оба ответа означают одно и то же», но я никогда не щедро отношусь к пониманию того, что делает программа, и я столкнулся с этим в контексте, где это действительно имеет значение. Поэтому я был бы очень признателен, если бы кто-то мог помочь мне выяснить, что происходит.