• 来开始一次函数式编程之旅

    函数式编程信步游园
    服务器君一共花费 19.052 ms 进行了 2 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    程序员拖沓成性,每天到了办公室后,泡咖啡、检查邮箱、阅读 RSS feed、到技术站点查阅最新的文章、在编程论坛的相关版面浏览公共讨论,并一次次地刷新以免漏掉一条信息。然后是午饭,回来后盯了 IDE 没几分钟,就再次检查邮箱、倒咖啡。最后在不知不觉中,结束了一天。

    不平凡的事是每隔一段时间会跳出一些很有挑战性的文章。如果没错,这些天你至少发现了一篇这类文章——很难快速通读它们,于是就将其束之高阁,直到突然你发现自己已经有了一个长长的链接列表和一个装满了 PDF 文件的目录,然后你梦想着到一个人迹罕至的森林里的小木屋苦读一年以期赶上,要是每天清晨你沿着那里的林中小溪散步时会有人带来食物和带走垃圾就更好了。

    虽然我对你的列表一无所知,但我的列表却是一大堆关于函数式编程的文章,而这些基本上是最难阅读的了。它们用枯燥的学院派语言写成,即使“在华尔街浸淫十年的计算专家(veterans)”也不能理解函数式编程(也写作 FP)都在探讨些什么。如果你去问花旗集团(Citi Group)或德意志银行(Deutsche Bank)的项目经理,为什么选择了 JMS 而不是 Erlang,他们可能回答不能在产业级的应用中使用学院派语言。问题是,一些最为复杂、有着最严格需求的系统却是用函数式编程元素写成的。这种说法不能让人信服。

    的确,关于函数式编程的文章和论文难于理解,但他们本来不必这么晦涩。这一知识隔阂的形成完全是历史原因。函数式编程的概念本身并不困难。这次旅程可以作为“简易的函数式编程导引”。是一座从命令式(imperative)思维模式到函数式编程的桥梁。去取杯咖啡回来继续读下去吧,不定啥时候你的同事就会开始取笑你对函数式编程发表的观点了。

    那么什么是函数式编程呢?它怎么产生?它可以被掌握吗(Is it edible)?如果它真如其倡导者所言,为什么没有在行业中得到更广泛的使用?为什么好像只有那些拿着博士学位的人才使用它?最要紧的是,为什么它就[哔]这么难学?这些 closure、continuation、currying、lazy evaluation 和 side effects 等等究竟是些什么东西?没有大学参与的项目怎么使用它?相比命令式思想友好、圣洁和亲近的一切的一切,为什么它看上去这么诡异?我们将于不久扫清这些疑问。首先让我来解释形成实际生活和学界文章之间巨大隔阂的缘起,简单得像一次公园的散步。

    信步游园

    启动时间机器,我们漫步在两千多年以前一个被遗忘了太久的春光明媚的日子,那是公元前 380 年。雅典城墙外的橄榄树荫里,柏拉图和一个英俊的奴隶小男孩朝着学院走去。“天气真好”,“饮食不错”,然后话题开始转向哲思。

    “瞧那两个学生,”为了使问题更容易理解,柏拉图仔细地挑选着用词对隔壁的小男孩说,“你认为谁更高呢?”

    小男孩看着那两个人站着的水漕说,“他们差不多一样高”。

    柏拉图说:“你的差不多一样是什么意思?”

    “我在这里看他们是一样高的,不过我肯定如果走近些就会看出他们高度的差别。”

    柏拉图笑了,他正把这个孩子带到正确的方向。“那么你是说,我们这个世界没有完全的等同了?”

    小男孩想了一会儿回答,“对,我不这样认为,任何事物总有一些区别,即使我们看不到它。”

    这句话非常到位!

    “那么如果这世上没有完全的相等,你又是如何理解‘完全’相等这个概念的呢?”

    小男孩迷惑得说:“我不知道。”

    最初尝试着理解数学的本源(nature)时也会产生这种疑惑。

    柏拉图暗示这个世上的万物都只是一个对完美的近似。他还认识到我们即使没有接触到完美但依然可以理解这一概念。所以他得出结论,完美的数学形式只能存在于另一个世界,我们通过和那个世界的某种联系在一定程度上知晓他们。很明显我们不能看到完美的圆,但我们可以理解什么是完美的圆并用数学公式将它表达出来。那么,什么是数学?为什么宇宙可以用数学定理描述?数学可以描述宇宙中的所有现象吗?

    数学哲学是一个很复杂的课题。像大多数哲学学科一样它更倾向于提出问题而不是给出解答。这些意见中很多都循回绕转于一个事实,即数学实际上是一个谜语:我们设置了一系列基本的、不冲突的原理和一些可以施加于这些原理的操作规则,然后我们就能堆砌这些规则以形成更复杂的规则。数学家把这种方法叫做“形式系统”或“演算”。如果愿意,我们可以很快写出一个关于 Tetris(经典的俄罗斯方块游戏)的形式系统。实际上,工作中的 Tetris 实现就是一个形式系统,只是被指定使用了个不常见的表现形式。

    人马座 α 星的某个生物文明也许不能理解我们的 Tetris 和圆的范式,因为可能他们唯一能感知输入的是带有嗅觉的某个器官。他们也许永远不会发现 Tetris 范式,但很可能会有一个圆的范式,我们很可能无法阅读它,因为我们的嗅觉没有那么复杂,可是一旦我们理解了(past)这一范式的表示形式(通过这种传感器和标准解码技术来理解这种语言),其底层的概念就可被任何智能文明所理解。

    有趣的是如果从来没有智能文明存在,Tetris 和圆的范式仍然严密合理,只是没有人注定将会发现他们。如果产生了一种智能文明,他就会发现一些形式系统来帮助描述宇宙的规律。但他还是不大可能发现 Tetris 因为宇宙中再没有和它相似的事物。在现实世界中这类无用的形式系统或迷题的例子数不胜数,Tetris 只是其中的一个典型。我们甚至不能确定自然数是否是对客观世界的完全近似,比如我们可以简单的设想一个很大的数,它不能用来描述我们的宇宙中任何东西,因为它(足够大)但又不是无穷大。

    To be continued ……

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [移动开发] 从代码角度去认识HttpClient 2 个条目
  2. [Python程序设计] Django Web环境配置 2 个条目
  3. [智力开发与知识管理] 学习编程为什么没会这么难? 7 个条目
  4. [数据库技术] MySQL常用自带函数 3 个条目
  5. [PHP程序设计] CodeIgniter与PHP框架设计 5 个条目
  6. [计算机算法] TAOCP与算法 12 个条目
  7. [智力开发与知识管理] 整体性学习步骤 9 个条目
  8. [JavaScript程序设计] Web实时通信技术名词解析 5 个条目
  9. [移动开发] Android 网络通信框架Volley 1 个条目
  10. [PHP程序设计] PHP数组探索 4 个条目
  11. [移动开发] 从代码角度去认识 Handler 4 个条目
  12. [Python程序设计] urls.py设置技巧 8 个条目
窗口 -- [协会]