小贴士&陷阱学习XSLT和“真正的”功能编程?

时间:2010-02-10 16:23:06

标签: xslt functional-programming

直到最近,我对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。由于缺乏声誉而删除了几个超链接。讨厌鬼! ; - )

4 个答案:

答案 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语法。因此,两个社区之间的社区规范和价值观有很大的上限。

  • 典型的功能语言不仅具有功能性,而且还有一些特别值得关注的东西,它赋予语言独特的风格。一些例子(按字母顺序排列):

    • Erlang非常关心可靠性和并行/分布式计算。
    • F#关心与.NET框架和类型系统的良好互操作。
    • Haskell关心纯度,关于性感类型,以及关于美妙语法的一个概念
    • Scheme关注可扩展性以及完美不同的美妙语法概念。
    • 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