Подтвердить что ты не робот

Является ли XSLT функциональным языком программирования?

Несколько вопросов о функциональных языках программирования заставили меня задуматься о том, является ли XSLT функциональным языком программирования. Если нет, то какие функции отсутствуют? XSLT 2.0 сократил или закрыл пробел?

4b9b3361

Ответ 1

XSLT является декларативным, а не stateful.

Хотя XSLT основан на идеях функционального программирования, он не является полным функциональным языком программирования, ему не хватает возможности рассматривать функции как тип данных первого класса. Он имеет элементы, такие как ленивая оценка для уменьшения ненужной оценки, а также отсутствие явных циклов.

Как и функциональный язык, я бы подумал, что он может быть хорошо распараллелен с автоматическим многопоточным многопоточным доступом на нескольких процессорах.

Из Википедия на XSLT:

В качестве языка XSLT зависит от функциональных языков и текстовые шаблоны соответствия языков как SNOBOL и awk. Его самый прямой предшественником был DSSSL, язык, который выполнял ту же функцию для SGML что XSLT выполняет для XML. XSLT может также можно рассматривать как шаблон процессор.

Вот отличный сайт по использованию XSLT как функционального языка с помощью FXSL. FXSL - это библиотека, которая реализует поддержку функций более высокого порядка.

Из-за FXSL я не думаю, что XSLT должен быть полностью функциональным. Возможно, FXSL будет включен в качестве стандарта W3C в будущем, но у меня нет никаких доказательств этого.

Ответ 3

Вот как это выглядит, когда я его программирую.

XSLT полностью основан на определении функций и применении их к выбранным событиям, которые спускаются по входному потоку.

XSLT позволяет вам установить переменную. Функциональное программирование не позволяет функциям иметь побочные эффекты - и это большой голос.

Тем не менее, записывая в XSLT, у одного есть то же самое, что и в режиме FP. Вы работаете с вводом - вы не меняете его - для создания вывода.

Это очень, совсем другая модель программирования, используемая при работе с DOM API. DOM не разделяет входные и выходные данные вообще. Вам передается структура данных - и вы управляете ею, как вы считаете нужным - без колебаний, ограничений или раскаяния.

Достаточно сказать, хотите ли вы FP и принципы, лежащие в основе этого, вам, вероятно, будет комфортно работать в нем. Точно так же, как опыт программирования на основе событий - и самого XML - также поможет вам в этом.

Если ваш единственный опыт связан с программами с нисходящими, не связанными с событиями событиями, то XSLT будет очень незнакомым, чужим ландшафтом. По крайней мере, сначала. Выросший немного опыта, а затем возвращающийся к XSLT, когда выражения XPath и обработка событий действительно удобны для вас, вы окупитесь.

Ответ 4

По большей части, что делает XSLT не 100% функциональным языком программирования, так это невозможность рассматривать функции как первоклассный тип данных.

Могут быть и другие - но это очевидный ответ.

Удачи!

Ответ 5

Saxon-SA ввел некоторые функции расширения, которые делают XSLT-функционалом. Вы можете использовать saxon:function(), чтобы создать значение функции (фактически {http://net.sf.saxon/java-type}net.sf.saxon.expr.UserFunctionCall), которое вы затем вызываете с помощью saxon:call().

Saxon-B имеет аналогичную функциональность с спариванием saxon:expression() и saxon:eval(). Разница в том, что saxon:expression() принимает любое выражение XPath, а saxon:eval() оценивает его, тогда как saxon:function() принимает имя функции, которая вызывает saxon:call().

Ответ 6

Это не аргумент, поскольку вы можете объявлять только переменные, а не изменять их значения после объявления. В этом смысле это декларативный, а не императивный стиль, как указано в статье г-на Новачева.

Языки функционального программирования, такие как Scheme или Erlang, также позволяют объявлять переменные, а в Haskell вы также можете сделать это:

- функция 'test' принимает переменную x и добавляет ее к каждому элементу списка xs

test :: [Int] -> [Int]<br>
test xs = map (+ x) xs<br>
where x = 2