`

函数式语言介绍

阅读更多

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

          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,看来是不得不学它了。

分享到:
评论

相关推荐

    函数式编程语言和MapReduce

    该文档简要介绍了函数式编程语言和MapReduce的相关知识。

    微软最新函数式编程语言F#教程

    函数式编程语言F# 英文版PDF介绍文档。

    Scala函数式编程

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

    JavaScript函数式编程

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

    javaScript函数式编程

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

    javaparser:基于函数式组合子逻辑的JAVA语言分析框架

    如果你使用过haskell, lisp等语言,这个函数式不用解释你也知道是怎么回事了。 如果你是一个老牌的c++/java程序员,那么这里还要稍微解释一下。当然如果您对这些虚头八脑的名词不感兴趣,那么,你尽可以跳过这一章,...

    Haskell:一种现代纯函数式语言 (2007年)

    随着软件系统的规模...文中 主要介绍一种纯的函数式语言 Haskell,包括其发展历史、程序特点、程序结构等。Haskell是现代 的、标准的、惰性的、纯函数式程序设计语言,它具有表达力强的语法,以及丰富的内置数据类型。

    JavaScript函数式编程库Prelude.ls.zip

    Prelude.ls是一个JavaScript函数式编程库,这是一个基础库,在一定程度上基于Haskell(一种纯函数式编程语言)的Prelude模块。 Prelude.ls基于LiveScript编写,LiveScript是JavaScript语言的前 身,由网景...

    《Rust 实战函数式编程(第 1 版)》

    函数式编程允许开发人员将程序划分为更小的、可重用的组件,从整体上简化软件的创建、测试和维护。结合 Rust 的强大功能,您可以开发满足现代软件需求的强大且可扩展的应用程序。本书将帮助您发现可用于以功能方式...

    Go语言中的函数式编程实践

    主要介绍了Go语言中的函数式编程实践,主要讲解Go语言中的函数式编程概念和使用。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    我眼中的JavaScript函数式编程

    JavaScript函数式编程是一个存在了很久的话题,但似乎从2016年开始,它变得越来越...本文将略去一大堆形式化的概念介绍,重点展示在JavaScript中到底什么是函数式的代码、函数式代码与一般写法有什么区别、函数式的代

    小而全的Java工具类库,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”

    模块 介绍 hutool-aop JDK动态代理封装,提供非IOC下的切面支持 hutool-bloomFilter 布隆过滤,提供一些Hash算法的布隆过滤 hutool-cache 简单缓存实现 hutool-core 核心,包括Bean操作、日期、各种Util等 hutool-...

    Javascript函数式编程语言

    JavaScript 是近年来非常受瞩目的一门编程语言,它既支持面向对象编程,也支持函数式编程。本文专门介绍JavaScript函数式编程的特性。

    面向语言编程介绍

    人们使用计算机描述世界的方式一直在不断地变化,从早期的汇编语言,到函数式言语,比如Lisp,再到面向过程、面向对象语言,和今天无限风光的动态语言等等。语言的变更表现了计算机需要理解的现实世界正正快速地走向...

    编程语言原理(第10版)

    最后两章介绍了函数式程序设计语言和逻辑程序设计语言。  本书内容丰富,讲解透彻,既可用做高等院校计算机及相关专业本科生程序设计语言课程的教材和参考书,也可供程序设计人员参考。 本书特色 ● 介绍了编程语言...

    函数式元编程语言的设计要素*) (2006年)

    本文介绍基于函数式语言的元编程系统,讨论元编程系统特别是同构系统的语言特点。从程序反射的角度分析元编程系统对程序设计语言在自我表示、自我分析和控制等方面的要求。以MetaML和Template Haskell为例论述在函数...

    面向Java开发者的函数式编程

    中文名: 面向Java开发者的函数式编程 原名: Functional Programming for Java Developers 作者: Dean Wampler 资源格式: PDF 版本: 英文文字版/更新EPUB版本/更新MOBI版本 出版社: O'Reilly书号: 978-1-4493-1103-2...

    基于C++实现简单函数绘图语言的解释器.zip

    1.会用正规式的产生式设计简单的语言语法 2.会用递归下降子程序编写编译器或解释器 实现简单函数绘图的语句 循环绘图(FOR-DRAW)比例设置 (SCALE)角度旋转(ROT) 坐标平移(ORIGIN) 注释 (-- 或 //) <2> 屏幕...

    Javascript函数式编程简单介绍

    几十年来,函数式编程一直是计算机科学狂热者的至爱,由于数学的纯洁性和谜一般的本质, 它被埋藏在计算机实验室,只有数据学家和有希望获得博士学位的人士使用。但是现在,它正经历一场复兴, 这要感谢一些现代语言...

Global site tag (gtag.js) - Google Analytics