`

函数式语言介绍

阅读更多

通常要学习新的编程语言,我一般遵循一下原则进行筛选:

          1. 能带来思想的革新,如果一门语言与自己已经掌握的语言有太大重叠甚至是一个体系的,没有学习的价值。目前编程语言我认为大体就是三类:命令式(别跟我说面向对象,它只不过是命令式的包装),函数式,逻辑式。

         命令式的语言相信很多人都学了一把了,C,C++,Java,C#,我就较系统的学了这一把,其他浅尝辄止的语言就不提了。函数式以前摸过Scheme后就再也没派上用场,逻辑式似乎只有一种Prolog,我记得还专门买过清华的一本烂书《人工智能(AI)编程语言(面向对象语言)》,全部翻译的是Visual Prolog官网的资料,词不达意还残缺不全,顺序混乱,而且那个Visual Prolog个人版每次编译都跳出烦人的对话框,界面丑陋,令人失望。目前函数式编程理论成熟,逻辑式编程理论似乎有缺陷,而且工业上那一吨的专家系统都是Common Lisp写的(注意,我可没有提Scheme),而且Common Lisp在人工智能领域外也大有作为,有很多成功的商业案例,Prolog就似乎只能在人工智能这一角混了。

          再加上《程序员》杂志上说的函数式在并发方面的好处,以及函数式语言一般抽象能力很强,正好用来写写人工智能的东东,于是我决定重新学习一门函数式语言了。

          2. 语言要有一个大的社区,最好已经经过了ANSI 或ISO标准化。这样优势很明显,社区大,就人多,人多就力量大。有标准,劲都往一处使,就会有一吨的库出来供你用。这一原则对于较新的语言不适用,更别提标准了,通过了标准的都不是新技术新思想了。不过可以从tiobe的排名上大致看出某个语言的社区规模,免得学了某个语言后才发现找不到编译器。

             最早的函数式语言当然是Lisp,现在有两个分支:Common lisp 和Scheme。Common lisp 是一个庞大的语言,支持多种编程范式,Scheme是Common lisp的子集,二者都是ANSI标准。Scheme 由于语言核心很小,多用在教育领域,Common Lisp多用来写专家系统,也可以构造大型软件。
         最纯的函数式语言是Haskell,完全没有副作用,有一个Hakell98标准,但还不是ANSI或ISO标准,算是一个社区标准吧。
         ML也是一种跟Lisp差不多老的语言,现在有Standard ML,Caml和微软的F#三个常见变种。
         Lisp 和Scheme 在tiobe的排名还不错,又老又壮,ML 和Haskell比 Lisp家族都要年轻,用的人明显少了很多,社区也比较小。erlang和ocaml排名都很后。

          3. 是否有好的开发环境。虽然新语言一般都不具备这一点,但如果有一个好的IDE,会觉得正式很多,学起来也有底气。

          Common Lisp 有个LispWorks 个人版(40多M)还可以称得上是IDE,但有很多限制,还有个Cusp的eclipse 插件。Scheme最好的估计是PLT Scheme(12M多)了,连语法高亮都没有,还有个SchemeWay的Eclipse插件,也有个Netbeans插件,都很简陋。Haskell有个免费的VisualHeskell的Visual studio(60多M)的插件,很不错,至于简陋的编辑器一大把,也有个eclipseFP的eclipse插件。

          4. 是否有相关资料和出版的书籍。新语言一般没有很多书,但至少得有一两本吧,否则就显得太势单力薄了。

           在amazon上搜索了一下,Haskell 有一本2007年新出的《Programming in Haskell》,Common Lisp只有2005年的书, Scheme只有2003年的书,OCaml有一本2006年11月出的《Practical OCaml》,最后是F#有2007年新出版的两本书《Foundations of F#》和《Expert F#》,erlang今年也有新书。

                            
       经过在tiobe和amzon的形势分析,有这几个候选:Common Lisp ,Haskell,OCaml,erlang。

       Common Lisp,Ocaml,erlang都是多范式的,都支持命令式,面向对象和函数方式。如果函数式语言支持这三种编程范式,我还不如用已经熟悉的Ruby呢,社区比上面三个至少大一个数量级。只有Haskell是纯FP语言,号称是最优雅的FP语言。对了,在ICFP上Haskell还是2004,2005,2006连续三年的冠军。

         Haskell 能强迫你用函数式编程,用其他语言你不知不决就会用命令式的习惯来编程。Haskell在第一条和第三条占优势,在第二条大大输给Common Lisp(lisp毕竟是最早的函数式语言,历史悠久,又经过标准化,不过我现在就是要学新思想嘛,可以不介意),第四条跟Common Lisp平手。Oaml ,erlang在第一条和第三条跟Common Lisp平手,第四条略有优势,因为都有新书,第二条就大大劣势了,基本上败的很惨。第一条是最重要的,因为毕竟是新技术,后三条只是用于参考。理所当然我选择了Haskell。

       《程序语言设计--实践之路》里 有一句多函数式编程的总结和展望:“看来在未来的年代里,我们很可能看到函数式语言使用的显著增长,特别是纯函数式语言”。
       纯函数式语言现在看来只有Haskell,看来是不得不学它了。

分享到:
评论

相关推荐

    books 动态函数式语言精髓

    标题中的“动态函数式语言精髓”指的是编程领域中关于动态函数式编程的一种深入探讨。动态函数式编程是一种编程范式,它结合了动态类型和函数式编程的特点,强调代码的简洁性、表达性和可读性。这类语言通常包括Lisp...

    Scala函数式编程

    所以,当你读完本书,做完习题后,虽然你的应用开发能力并不会直接提升,但你会体会到构建函数式语言和框架时的难点和取舍,从而增进你的框架开发和语言设计的能力。  ——ThoughtWorks Lead Consultant 杨博  这...

    函数式程序设计入门

    总结以上知识点,函数式程序设计入门课程主要介绍了函数式编程的基础理论,特别是λ演算,并通过Standard ML这门编程语言来教授函数式编程的实践。课程内容涉及了惰性求值与严格求值的区别,强调了严格求值语言在...

    函数式编程中的Swift与Swift中的函数式编程

    Swift的函数式特性不仅仅是为了在技术上与Haskell、Erlang等函数式语言看齐,更是为了提高软件开发的效率、可靠性和维护性。同时,Swift社区也提供了许多便于实现函数式编程思想的工具和库,比如Swift的函数式扩展和...

    JS 函数式编程指南 PDF

    这本指南不仅涵盖了函数式编程的基础理论,还详细介绍了如何在实际开发中应用这些理论,使之成为提高编程实践水平和深化编程理解的有力工具。通过学习和应用这些函数式编程技巧,开发者可以更好地理解和运用...

    Python函数式编程(第2版)1

    Python虽不是纯函数式语言,但它具备函数式编程的许多关键特性,如函数作为一等公民,以及丰富的高阶函数支持。 书中首先介绍了函数式编程的基本概念和特点,包括函数的不可变性、纯函数、柯里化、高阶函数等。作者...

    函数式swift 函数式编程(中文版)高清pdf

    《函数式Swift》不仅介绍了函数式编程的基础知识,还深入探讨了如何将函数式编程的思想和技术应用到实际的Swift开发中去。对于希望提升Swift编程技能的开发者来说,这本书是不可或缺的学习资源,帮助他们编写更加...

    函数式 Swift

    作者王巍(网名喵神,onevcat)是一位知名的iOS开发者和技术博主,他在书中深入浅出地介绍了如何将函数式编程的思想应用于Swift编程中。 函数式编程是一种编程范式,它强调将计算视为数学函数的评估,而不是状态的...

    JS函数式编程指南

    尽管JavaScript通常被视为一种命令式语言,但它同时也支持函数式编程的特点,这使得开发者能够在日常工作中实践这些概念。 ##### 一个简单例子 这里提供了一个简单的例子来展示如何在JavaScript中实现函数式编程的...

    JavaScript函数式编程

    JavaScript 是近年来非常受瞩目的一门编程语言,它既支持面向对象编程,也支持函数式编程。本书专门介绍JavaScript函数式编程的特性。 全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、...

    函数式Swift.epub

    《函数式Swift》是一本深度探讨Swift编程语言中函数式编程思想的著作,由王巍翻译,适合已经掌握基础Swift语法的开发者进一步提升技术水平。该书以Swift 4.0为背景,详细阐述了如何在Swift中应用函数式编程的理念,...

    javaScript函数式编程

    内容简介 · · · · · · JavaScript 是近年来非常受瞩目的一门编程语言,它既...A.2 能编译成JavaScript的函数式语言196 A.2.1 ClojureScript196 A.2.2 CoffeeScript197 A.2.3 Roy198 A.2.4 Elm198 附录B推荐书目

    函数式编程

    在Stephen Gilmore的《Programming in Standard ML’97: A Tutorial Introduction》一书中,介绍了SML的编程基础,这本教程提供了丰富的示例和练习,帮助学习者掌握函数式编程的概念和实践。作者在引言中强调了软件...

    使用clean函数式编程

    - **特点**:与Miranda、Haskell和ML等其他现代函数式语言有许多共同之处,同时提供了额外的支持用于独立窗口应用程序的开发、进程间通信及分布式应用开发。 #### 二、Clean语言的基础 - **功能**:Clean语言使...

Global site tag (gtag.js) - Google Analytics