学习XSLT和"真正的"功能编程的技巧和陷阱?

Mar*_*rde 25 xslt functional-programming

直到最近,我对XSLT的了解足以满足我简单,直接的需求.但是,当"只是尝试的东西"不起作用时,一个更高级的要求将我送到参考资料.从一开始就开始真的很有趣.我最初在最后期限压力期间学习了XSLT,在20/20事后看来"工作"显然比"理解"更重要.

我很惊讶在Michael Kay的书的第33页上读到XSLT源于Scheme.维基百科说,

Scheme是编程语言Lisp的两种主要方言之一.

也许我知道(或者很快就会知道)关于函数式编程的更多信息比我想象的要多.在搜索SO之类的帖子,比如XSLT是一种函数式编程语言吗?并且根据其工作链接显示,无论XSTL是否是一种功能语言,都有一些意见.从帖子中我应该选择哪种函数式编程语言作为第一种函数式编程语言? 我首先得到了学习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的概念,这些概念不适用于"真正的"函数式编程语言?

简短的回答很好,因为学习函数式编程语言对我来说是一个计划外的未来项目.

PS因缺乏声誉而删除了几个超链接.讨厌鬼!;-)

rtp*_*son 5

我使用XSLT玩了一下,并深入研究了函数式语言Lisp,Scheme和Haskell.从我所看到的一点点来看,我不确定它常用的XSLT会教你很多关于函数式语言的知识.你可能会学到一些技巧,但在我看来,JavaScript比你在无类型函数式语言中看到的更好.

维基百科支持我这个:

作为一种语言,XSLT受功能语言以及基于文本的模式匹配语言(如SNOBOL和awk)的影响.它最直接的前身是ISO DSSSL,这是一种为XSLT为XML执行的完整SGML执行相同功能的语言.许多开发XSLT的标准委员会之前曾在DSSSL上工作过,包括James Clark.XSLT也可以被认为是Turing-complete模板处理器.

换句话说,它从函数式语言中借鉴了很多,但也借用了像awk和SGML这样的模板语言.所以,是的,它是一种函数式语言,与C++模板是一种功能性语言一样,并非完全显而易见.但是从学习XSLT到Scheme或Haskell没有容易映射的线.

另外,不要低估不同功能语言之间的相互关系.Lisp和Scheme都是如此松散的类型,以至于感觉基本没有类型.我认为这些语言就像编程语言的普通话一样,具有基本流畅的基于上下文的语法.另一方面,Haskell的类型非常强大,甚至让有经验的程序员感到困惑.它还超越了它的lambda-calculus根源,借用抽象代数和范畴理论中的概念,使得学习非数学类型有点令人难以置信.

但这一切都不是为了劝阻你.通过各种方式,学习一种功能语言.他们将以您从未怀疑的方式改变您的编程方法.


Nor*_*sey 4

我的建议是,当您学习第一个第二功能语言时,不要过度依赖 XSLT 。这就是我的想法:

  • 现在有很多通往各种函数式语言的良好“入门通道”,这些语言不需要预先具备知识和经验。如果您的 XSLT 体验使您能够更快地进入入口,我们都会感到惊讶和高兴,但这不是必要的。

  • 函数式程序员非常关心语法。XSLT 程序员被迫使用 XML 语法。因此,两个社区之间的社区规范和价值观存在很大的上限。

  • 典型的函数式语言不仅是函数式的,而且还有它所关心的一些特殊的东西,这赋予了该语言自己独特的风味。一些示例(按字母顺序排列):

    • Erlang 非常关心可靠性和并行/分布式计算。
    • F# 关心与 .NET 框架和类型系统的良好互操作。
    • Haskell 关心纯度、性感类型以及美丽语法的一种概念
    • Scheme 关心可扩展性以及完全不同的优美语法概念。
    • XSLT 关心模式匹配和处理 XML。

关于 SO 和其他地方有很多关于选择要学习的函数式语言的材料;如果您愿意,您可以看看一位多语言函数式程序员的想法。选择一种语言(任何语言),然后坐下来开始工作,享受飞行!