Я читал, что в отличие от языков программирования, XSLT не позволяет нам устанавливать новое значение для переменной.
Два неправильных утверждения здесь :
"в отличие от языков программирования, XSLT".XSLT - это язык программирования.Он входит в группу языков программирования под названием «Функциональные языки программирования».Ближайшее правильное утверждение к тому, что вы пытаетесь сказать: «в отличие от * процедурных» языков программирования »
« XSLT не позволяет нам устанавливать новое значение для переменной ». Опятьневерно - это не XSLT, который не разрешает что-то - это любой функциональный язык программирования, а XSLT - это функциональный язык программирования.
Мне просто интересноесть ли хаки, чтобы обойти это ограничение, которое используют люди?
Есть хаки нет , поскольку людям не нужны такие хаки. Люди, которые не могут жить, не имея возможностиизмените значение переменной, просто используйте процедурный язык программирования.
, поскольку возможность сброса значения переменной по своей природе полезна AFAIK
На самом деле, обладание такой способностью вредно в большинстве случаев . Это делает намного более трудным понимание программы и / или проверку ее правильности с помощью верификаторов корректности программы. Любая программас побочными эффектами также труднее оптимизировать, и любые такие программы могут быть менее оптимизированы, чем неизменный код, который также решает ту же проблему.
Полезно знать : Хорошо известно, что любаяПрограмма, которая может быть решена с помощью процедурного языка, также может быть решена с помощью функционального языка.Следовательно, не требуется изменяемая переменная - нет даже одной проблемы, которая не может быть решена функционально.То, что вы думаете, что проблема неразрешима функционально, на самом деле не делает эту проблему неразрешимой - просто спросите других людей, и они покажут вам аккуратное решение - часто намного короче и намного элегантнее, чемпроцедурное решение.
Хорошим примером того, что можно сделать с помощью чистого XSLT , является библиотека FXSL .FXSL предоставляет набор функций / шаблонов для решения больших классов задач, среди которых довольно сложные, такие как поиск любой степени (x^y
) или логарифма, или основные тригонометрические функции, или решение любого уравнения f(x) = 0
и т. Д...
Другие примеры функций FXSL находятся в области обработки текста - токенизация слов, проверка орфографии, построение соответствия и т. Д. ...
Еще более сложные задачи, реализованные с помощью функций FXSL : универсальный парсер LR-1, парсеры для JSON и XPath 2.0, генерация последовательности случайных чисел, числовое интегрирование и дифференцирование, ... и т. Д.
Все это делается без изменения каких-либо переменных - немало смущает тот факт, что «XSLT не позволяет этого»:)