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

有帮助吗?

解决方案

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

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

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

来自维基百科上的XSLT

  

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

这是一个使用 XSLT作为功能语言在FXSL的帮助下。 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%函数式编程语言的原因是它无法将函数视为一流的数据类型。

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

祝你好运!

Saxon-SA引入了一些使XSLT功能正常的扩展功能。你可以使用 saxon:function() 创建一个函数值(实际上是 {http://net.sf.saxon/java-type} net.sf.saxon.expr .UserFunctionCall value)然后用 saxon:call()调用。

Saxon-B具有与 saxon:expression() saxon:eval()。不同之处在于 saxon:expression()接受任何XPath表达式, saxon:eval()评估它,而 saxon:function()获取 saxon:call()调用的函数的名称。

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

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

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

的每个元素上
test :: [Int] -> [Int]
test xs = map (+ x) xs
where x = 2
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top