关于函数式编程语言的几个问题已经让我开始思考XSLT是一种函数式编程语言。 如果没有,什么功能都不见了? 已XSLT 2.0缩短或关闭间隙?
Answer 1:
XSLT是声明,而不是有状态的。
尽管XSLT是基于函数式编程的思想,它不是一个全功能的编程语言,它缺少治疗作为第一类数据类型的能力。 它有想偷懒的评价要素,以减少不必要的评估,也没有明确的循环。
等等,虽然功能性语言,我会认为它可以很好地并行跨越多个处理器自动安全的多线程技术。
从维基百科上的XSLT :
作为一门语言,XSLT是由函数式语言的影响,并通过像SNOBOL和awk基于文本的模式匹配的语言。 其最直接的前身是DSSSL,即进行了SGML同样的功能XSLT用于执行XML的语言。 XSLT也可以被看作是一个模板处理器。
下面是使用一个伟大的网站XSLT的功能语言与FXSL的帮助。 FXSL是实现对高阶函数的支持库。
因为FXSL我不认为XSLT有必要充分发挥作用本身。 也许FXSL将被包括在未来的W3C标准,但我没有这方面的证据。
Answer 2:
我相信你们已经发现了这个链接现在:-) http://fxsl.sourceforge.net/articles/FuncProg/Functional%20Programming.html 。
那么在XSLT的功能是一流的公民与所有:-)经过一番变通
Answer 3:
这就是那种当我编程是什么样的感觉。
XSLT是完全基于定义函数并将其应用于该下来输入流选择的事件。
XSLT允许您设置一个变量。 函数式编程不允许功能有副作用 - 这是一个大问题。
尽管如此,在XSLT写作,人有相同的“感觉在FP方式工作您正在使用的输入工作 - 你不改变它 - 创造输出。
这是从与DOM API时使用的一个非常,非常不同的编程模型。 DOM完全不分开的输入和输出。 你都交给一个数据结构 - 你裂伤它你认为合适的 - 没有犹豫,限制,或悔恨。
我只想说,如果你喜欢FP和它背后的原理,你可能会觉得舒服在它的工作。 就像与事件驱动编程经验 - 和XML本身 - 会让你舒服为好。
如果你唯一的经验是自上而下的,非事件驱动程序 - 那么XSLT会很陌生,陌生的风景确实如此。 至少在第一。 成长了一点经验,然后回来时,XSLT XPath表达式和事件处理是真的舒服,你会有相当大的回报。
Answer 4:
在大多数情况下,是什么让XSLT不是100%的函数式编程语言是无力治疗功能作为第一类数据类型。
可能有一些人 - 但是这是显而易见的答案。
祝好运!
Answer 5:
撒克逊-SA已经推出了一些扩展功能,这使XSLT的功能。 您可以使用saxon:function()
创建一个函数值(实际上是{http://net.sf.saxon/java-type}net.sf.saxon.expr.UserFunctionCall
值),你再与调用saxon:call()
撒克逊-B具有的配对类似的功能saxon:expression()
和saxon:eval()
不同的是, saxon:expression()
采取任何XPath表达式,并且saxon:eval()
计算它,而saxon:function()
需要一个功能的名称saxon:call()
调用。
Answer 6:
这是不是一个真正的说法,因为你只能声明变量,声明之后不改变它们的值。 在这个意义上它是不声明势在必行的风格,如Novatchev先生的文章指出。
函数式编程语言,如计划或Erlang的让你声明变量的欢迎,并在哈斯克尔你也可以这样做:
- 功能“测试”取变量x,并增加了它列表XS的每一个元件上
test :: [Int] -> [Int]
test xs = map (+ x) xs
where x = 2