XSLT是一种功能编程语言吗?

时间:2020-03-06 14:29:55  来源:igfitidea点击:

关于函数式编程语言的几个问题使我开始思考XSLT是否是一种函数式编程语言。如果没有,缺少哪些功能? XSLT 2.0是否缩小或者缩小了差距?

解决方案

在大多数情况下,使XSLT不能成为100%功能编程语言的原因在于,它无法将功能视为一流的数据类型。

可能还有其他一些-但这是显而易见的答案。

祝你好运!

XSLT是声明性的,而不是有状态的。

尽管XSLT基于函数式编程思想,但它不是完整的函数式编程语言,它缺乏将函数视为一流数据类型的能力。它具有像惰性评估这样的元素,可以减少不必要的评估,也可以减少显式循环。

不过,就像功能语言一样,我认为它可以与跨多个处理器的自动安全多线程很好地并行化。

从XSLT上的Wikipedia:

As a language, XSLT is influenced by
  functional languages, and by
  text-based pattern matching languages
  like SNOBOL and awk. Its most direct
  predecessor was DSSSL, a language that
  performed the same function for SGML
  that XSLT performs for XML. XSLT can
  also be considered as a template
  processor.

这是一个在FXSL的帮助下将XSLT用作功能语言的绝佳站点。 FXSL是一个实现对高阶函数的支持的库。

由于使用了FXSL,我认为XSLT本身不需要完全发挥功能。也许FXSL将来会被包含为W3C标准,但我对此没有任何证据。

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()"调用的函数名称。 。

这就是我编程时的感觉。

XSLT完全基于定义函数并将其应用于输入流中的选定事件。

XSLT允许我们设置变量。函数编程不允许函数产生副作用,这是一个很大的问题。

仍然,用XSLT编写,"具有与以FP方式工作相同的感觉。我们正在使用输入,而不是更改输入以创建输出。

与使用DOM API时使用的编程模型相比,这是一种非常非常不同的编程模型。 DOM根本不分离输入和输出。我们将获得一个数据结构,并且可以毫不犹豫,无约束地或者自责地处理它的外观。

只需说出我们是否喜欢FP及其背后的原理,就可以轻松地使用它。就像使用事件驱动的编程和XML本身的经验一样,我们也会对此感到满意。

如果我们唯一的经验是使用自上而下的非事件驱动程序,那么XSLT将会是非常陌生的外来环境。至少起初。积累一点经验,然后在XPath表达式和事件处理非常适合我们时返回XSLT,这将为我们带来丰厚的回报。

我相信你们现在已经找到了此链接:-) http://fxsl.sourceforge.net/articles/FuncProg/Functional%20Programming.html。

XSLT中的功能良好的公民是头等公民,毕竟还有一些解决方法:-)

那并不是一个真正的参数,因为我们只能声明变量,而在声明后不能更改它们的值。从这种意义上说,这是声明性的而不是命令性的风格,如诺瓦切夫先生的文章所述。

诸如Scheme或者Erlang之类的功能性编程语言也使我们能够声明变量,在Haskell中,我们也可以这样做:

函数'test'接受变量x并将其添加到列表xs的每个元素上

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