关于函数式编程语言的几个问题让我思考XSLT是否是一种函数式编程语言.如果没有,缺少哪些功能?XSLT 2.0是否缩短或缩小了差距?
XSLT是声明性的而不是有状态的.
虽然XSLT基于函数式编程思想,但它不是一种完整的函数式编程语言,它缺乏将函数视为一级数据类型的能力.它具有惰性评估等元素,可减少不必要的评估,也缺少显式循环.
就像一个函数式语言一样,我认为它可以很好地与多个处理器之间的自动安全多线程并行化.
来自维基百科的XSLT:
作为一种语言,XSLT受功能语言以及基于文本的模式匹配语言(如SNOBOL和awk)的影响.其最直接的前身是DSSSL,这是一种为SGSL执行与XML相同功能的语言.XSLT也可以被视为模板处理器.
这是一个很好的网站,在FXSL的帮助下使用XSLT作为函数式语言.FXSL是一个实现对高阶函数的支持的库.
由于FXSL,我不认为XSLT本身需要完全正常运行.也许FXSL将来会被列为W3C标准,但我没有证据证明这一点.
我相信你们现在已经找到了这个链接:-) http://fxsl.sourceforge.net/articles/FuncProg/Functional%20Programming.html.
XSLT中的良好功能是一流的公民,毕竟有一些解决方法:-)
这就是我编程时的感受.
XSLT完全基于定义函数并将它们应用于输入流中的选定事件.
XSLT允许您设置变量.功能编程不允许函数产生副作用 - 这是一个很大的问题.
尽管如此,在XSLT中写作时,人们也有同样的"感觉就像以FP方式工作.你正在使用输入 - 你不是在改变它 - 来创建输出.
这是一个非常非常不同的编程模型,与使用DOM API时使用的编程模型非常不同.DOM根本不分开输入和输出.您将获得一个数据结构 - 并且您可以毫不犹豫,限制或悔恨地将其视为您认为合适的方式.
可以这么说,如果你喜欢FP及其背后的原理,你可能会感到很舒服.就像事件驱动编程的经验 - 以及XML本身 - 也会让你感到舒服.
如果你唯一的体验是自上而下,非事件驱动的程序 - 那么XSLT将是非常陌生的,确实是外星人的风景.至少在开始时.增加一点经验然后回到XSLT,当XPath表达式和事件处理对你来说真的很舒服时,你会得到很好的回报.
在大多数情况下,XSLT不是100%函数式编程语言的原因是它无法将函数视为一流的数据类型.
可能还有其他一些 - 但这是明显的答案.
祝好运!