直到最近,我对XSLT的了解足以满足我简单,直接的需求。但是,当“只是尝试的东西”不起作用时,一个更高级的要求将我送到参考资料。从一开始就开始真的很有趣。我最初在最后期限压力期间学习了XSLT,在20/20事后看来“工作”显然比“理解”更重要。
我很惊讶在Michael Kay's book的第33页上读到XSLT的根源是Scheme。维基百科说,
Scheme是编程语言Lisp的两种主要方言之一。
也许我知道(或者很快就会知道)关于函数式编程的更多信息比我想象的要多。在搜索SO以查找Is XSLT a functional programming language?之类的帖子并按照其工作链接显示,无论XSTL是否是一种功能语言,都有一些意见。从帖子Which functional programming language should I choose as first functional programming language?我得到了第一次学习F#的建议,因为我来自.NET,我喜欢快速学习有用的程序。
我的第一个问题是,如果有人非常了解XSLT 2.0,那么在学习F#,Lisp或Haskell之前,有多少“真正的”函数式编程语言如F#,Lisp或Haskell已经知道了?出于讨论的目的,假设一个“非常熟悉XSLT 2.0”的人在第一次阅读XSLT Cookbook时学习的概念非常少。相反,她对不熟悉的信息的反应是,“当然这是一个很好的方法。我应该想到这一点!”
第二个问题是,是否有XSLT 2.0 / XPATH 2.0的部分我应该确保我能够更好地理解学习F#/ Lisp / Haskell?
第三,如果有人计划最终学习F#/ Lisp / Haskell等,那么XSLT的哪些部分最好被忽略?也就是说,XSLT是否具有类似于GOTO,ALTER和ON ERROR RESUME NEXT的概念,这些概念不适用于“真正的”函数式编程语言?
简短的回答很好,因为学习函数式编程语言对我来说是一个计划外的未来项目。
P.S。由于缺乏声誉而删除了几个超链接。讨厌鬼! ; - )
答案 0 :(得分:5)
我使用XSLT玩了一下,并深入研究了函数式语言Lisp,Scheme和Haskell。从我所看到的一点点来看,我不确定它常用的XSLT会教你很多关于函数式语言的知识。你可能会学到一些技巧,但在我看来,JavaScript比你在无类型函数式语言中看到的更好。
Wikipedia支持我这个:
作为一种语言,XSLT受到影响 函数式语言,以及 基于文本的模式匹配语言 喜欢SNOBOL和awk。它最直接 前身是ISO DSSSL,一种语言 执行相同功能的 XSLT为XML执行的完整SGML。 许多标准委员会都认为 开发的XSLT以前曾经工作过 在DSSSL,包括詹姆斯克拉克。 XSLT 也可以认为图灵完整 模板处理器。
换句话说,它从函数式语言中借鉴了很多,但也借用了像awk和SGML这样的模板语言。所以,是的,它是一种功能性语言,与C++ templates are a functional language一样,并非完全显而易见。但是从学习XSLT到Scheme或Haskell没有容易映射的线。
另外,不要低估不同功能语言之间的相互关系。 Lisp和Scheme都是如此松散的类型,以至于感觉基本没有类型。我认为这些语言就像编程语言的普通话一样,具有基本流畅的基于上下文的语法。另一方面,Haskell的类型非常强大,甚至让有经验的程序员感到困惑。它还超越了它的lambda-calculus根源,借用抽象代数和范畴理论中的概念,使得学习非数学类型有点令人难以置信。
但这一切都不是为了劝阻你。通过各种方式,学习一种功能语言。他们将以您从未怀疑的方式改变您的编程方法。
答案 1 :(得分:4)
当你学习第一个第二种功能语言时,我的建议是不要过分依赖XSLT。这就是我的想法:
现在有各种各样的功能性语言有很多好的“上线”,这些功能语言不会假设以前的知识和经验。如果您的XSLT体验让您能够更快地沿着入口行驶,我们都会感到惊讶和高兴,但这并不是必需的。
功能程序员非常关心语法。 XSLT程序员被迫使用XML语法。因此,两个社区之间的社区规范和价值观有很大的上限。
典型的功能语言不仅具有功能性,而且还有一些特别值得关注的东西,它赋予语言独特的风格。一些例子(按字母顺序排列):
在SO和其他地方有很多关于选择功能性语言学习的材料;如果你愿意,你可以看到what one polyglot functional programmer thinks。选择一种语言 - 任何语言 - 然后坐下来,开始工作,享受飞行!
答案 2 :(得分:2)
我不太合格,因为我确信会有一些回答者。我已经使用了Haskell,Scheme和XSLT,虽然我以相反的顺序学习它们 - Scheme,然后是Haskell,然后使用XSLT作为基本的东西。我发现使用Scheme和后来的Haskell学习的思维过程确实帮助我理解了XSLT编程的高级概念。当然,所有细节仍然需要从参考指南等中挖掘出来。
我想你会发现相反的效果。
(我还发现,XSLT与XML中的其他编程语言一样,是处理XML文件的一种痛苦方式,只需用Python编写脚本就更容易,更快速,更灵活。)
答案 3 :(得分:2)
我相信XSLT实际上是一个很好的第一个纯函数式语言:http://blogs.msdn.com/ashleyf/archive/2007/04/11/xslt-a-pure-functional-language.aspx