В общем, язык разработан так, что вы не можете определить порядок оценки, что затрудняет демонстрацию того, что это не то, что вы ожидаете. Чтобы соблюсти фактический порядок оценки, вам нужно сделать что-то, что имеет побочные эффекты, что обычно означает отклонение от спецификации языка и использование расширений поставщика. Например, вы можете использовать файловый модуль EXPath и вызывать вызовы file:append-text()
, а затем проверить порядок записей, добавляемых во внешний текстовый файл.
Конечно, ничего не будет доказано, если записи вфайл в том порядке, в котором вы ожидаете. Обработчики запросов не собираются использовать неочевидный порядок выполнения просто для удовольствия. Они будут делать это только в том случае, если есть что-то, что можно получить, изменив порядок. Saxon, например, будет откладывать вычисление переменных до тех пор, пока они не будут использованы, и будет выводить выражения из цикла, если это возможно. Но тогда возникает проблема: если вы используете функции с побочными эффектами, такими как file:append-text()
, чтобы наблюдать это поведение, Saxon может обнаружить, что ваш код имеет побочные эффекты, и подавить оптимизацию.