今年的计划很完美,上半年学一门脚本语言(Python),现在说不上精通,但至少各种小需求下的正常使用是没什么问题的了,而且也写过不少的程序,最近的就是在重写仙剑啦,不过也很久没写了。。。相比之前马马虎虎学的Ruby(这个还好,至少用ROR做了一个小网站,虽然现在已经报废),Perl(跟学屠龙术差不多,学完了不知道用在哪里,渐渐地就忘光了,现在仅仅依稀还记得各种_、$的古怪含义)。想想Python确实是有它的优势,首先最大的优势当然就是google在用啦,然后各种语法糖也很舒服,库也多,基本上所有需求都能找到相应的库。不足之处是似乎论脚本比不过Perl、论OO比不过Ruby,论函数式好像也不怎么样,总之就是感觉比较杂,而且正则不是native的,也多多少少有点麻烦。缩进是个很有意思的东西,不过我喜欢,唯一的麻烦就是复制代码往往要改缩进。
-------------------------------------------------------分割一下-------------------------------------------------------
鉴于Python已经可以投入正常使用了,于是决定开始学一个函数式语言,其实可以选择的余地还是很多的,比如Scala、Lisp、Coq等等,不过Scala似乎没有那么纯函数;Coq似乎又仅仅是一个理论语言,没什么实用意义;Lisp似乎不错,但总觉得老了点。然后看到程序员上的一篇文章《纯粹之美——浅谈纯函数式语言Haskell》,发现一个很有趣的东西:Haskell是一个人名(Haskell Curry),然后Curry同构不就是之前学Coq一直不怎么明白的东西嘛。所以想想就学Haskell算了。
于是昨天下了Haskell(七十多M,忒大了。。。),装上,开始边学边做Project Euler,感觉良好~
目前的感觉是Haskell和去掉证明部分的Coq太像了,大概函数式语言都长得一个样子的缘故,不过更具实用性,因为有IO等交互性的模块。关于为什么能有IO,《纯粹之美——浅谈纯函数式语言Haskell》里面是这么说的:
----------------------------------------------------以下为摘抄----------------------------------------------------
Haskell里面用了Monad的概念,帮助干这些“脏活”。Haskell是一门通用语言,可以实现所有的读写文件、访问数据库等功能。但是它把IO操作与纯函数严格的隔离开。怎么办到呢?haskell的另外一个特性:强类型的特性就发挥作用了。Haskell里面每一个函数都有一个类型签名,整个程序就像是很多个形状不同的拼图,两个函数必须形状匹配才能拼装在一起。任何带有副作用的函数,其类型签名中都会带上一个IO的类型标签,这个IO类型标签就像一个戳,只要带上了,任何调用它的函数也必须有IO标签。只有带有IO类型标签的函数才能调用另一个带有IO标签的函数,而在IO函数内可以调用纯函数,而反过来,纯函数却不可以调用带有IO标签的函数。
-------------------------------------------------------摘抄结束-------------------------------------------------------
说白了,就是IO这样的模块是游离在Haskell函数式核心模块之外的补充部分。
还有一个很有意思的东西就是Haskell的程序可以很容易变成无需Haskell平台环境的可执行文件,这个比Java、Python什么的都方便多了。
除此之外,Haskell就很像是Coq了:纯函数式、强类型、惰性计算(lazy)、函数组合、高阶函数等等。
总而言之,统而言之,争取在春节前后能把Haskell用起来。