XSLT是一种功能编程语言吗?
关于函数式编程语言的几个问题使我开始思考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