XSLT是一种函数式编程语言吗?

时间:2008-09-21 02:21:45

标签: xslt functional-programming fxsl

关于函数式编程语言的几个问题让我想到XSLT是否是一种函数式编程语言。如果没有,缺少哪些功能? XSLT 2.0是缩短还是缩小了差距?

6 个答案:

答案 0 :(得分:28)

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

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

虽然像函数式语言一样,但我认为可以通过多个处理器自动安全多线程很好地并行化。

来自Wikipedia on XSLT

  

作为一种语言,XSLT受到影响   函数式语言,以及   基于文本的模式匹配语言   喜欢SNOBOL和awk。它最直接   前身是DSSSL,一种语言   为SGML执行相同的功能   XSLT为XML执行。 XSLT可以   也被视为模板   处理器。

这是一个很好的网站,在FXSL的帮助下使用XSLT as a functional language。 FXSL是一个实现对高阶函数的支持的库。

由于FXSL,我不认为XSLT本身需要完全正常运行。也许FXSL将来会被列为W3C标准,但我没有证据证明这一点。

答案 1 :(得分:7)

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

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

答案 2 :(得分:6)

这就是我编程时的感受。

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

XSLT允许您设置变量。功能编程不允许函数产生副作用 - 这是一个很大的问题。

尽管如此,在XSLT中写作时,人们也有同样的“感觉就像以FP方式工作。你正在使用输入 - 你没有改变它 - 创建输出。

这是一个非常非常不同的编程模型,与使用DOM API时使用的编程模型非常不同。 DOM根本不分开输入和输出。你会得到一个数据结构 - 你可以毫不犹豫,限制或悔恨地将它看作适合你的方式。

只需说一下你是否喜欢FP及其背后的原理,你可能会感到很舒服。就像使用事件驱动编程的经验 - 以及XML本身 - 也会让你感到舒服。

如果您唯一的体验是自上而下,非事件驱动的程序 - 那么XSLT将非常陌生,确实是外星人的风景。至少在开始时。增加一点经验然后回到XSLT,当XPath表达式和事件处理对你来说真的很舒服时,你会得到很好的回报。

答案 3 :(得分:5)

在大多数情况下,XSLT不是100%函数式编程语言的原因是它无法将函数视为一流的数据类型。

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

祝你好运!

答案 4 :(得分:4)

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

答案 5 :(得分:0)

这不是一个真正的论证,因为你只能声明变量,而不是在声明后改变它们的值。从这个意义上来说,正如诺瓦切夫先生的文章所述,它是陈述性的而不是命令式的风格。

Scheme或Erlang等函数式编程语言也可以声明变量,在Haskell中你也可以这样做:

- 函数'test'接受变量x并将其添加到列表xs

的每个元素上
test :: [Int] -> [Int]
test xs = map (+ x) xs
where x = 2