Haskell is called a lazy, pure functional programming language.
这个定义中的两个关键: Lazy, Pure
Lazy evaluate: 相对于 Strict ,直到需要时才求值。 传递给函数的参数也不会提前计算,这一点和 C/Java 等对比正好相反:在strict 类语言中,参数先进行计算,不管是否用到。
lazy 有一个好处就是强大的:无限数据结构 [1..] 表示所有的自然数, 我们可以:
nums = [1..]
take 5 nums
来得到所有自然数的前5个元素,但并不需要把所有的自然数都存放到 nums 中, nums 在这里只是一个名字,一个 referrence。
Pure functional programming lang: 纯爷们~
纯FP就是指不允许Side Effect 也就是副作用,我们知道副作用不是一个好词,但是没有副作用,我们什么都干不了! 那这门语言有什么用呢?不能打印,不能存取文件?别急,我们可以通过叫做 Monad 的东西来实现,同时把纯函数部分程序和这些“危险”的部分分隔开。我理解这里的用意是要杜绝副作用产生的bug~,还记得在C,Java中某个函数修改了一个全局变量,程序很诡异的出错的情况么?
Haskell 是一门纯 FP类语言,执行一个FP类的语言,就相当于在数学上求一个函数的值,这一点和一般的命令式语言不同。对比:
FP : 求值, 程序是一个个函数,执行语句顺序不定
命令式:指令,程序是一条条对应到机器语言的指令,按前后顺序执行
Haskell的历史:距今(2007)20年前也就是1987年,各位牛牛们聚会,发现有很多的FP类语言了,有必要统一一下,于是以FP历史上一位灵魂人物 Haskell Curry 的名字命名了一种语言Haskell,现在实用的是98年的时候新发布的 Haskell 98 标准。具体的看原文吧。
为什么使用haskell? 比较容易写出漂亮的、简短的无错误的程序。 (作者给了一个很美好的愿景)
当然,在学习过程中了解到很多程序理论,也是很重要的一条。
为什么不用Haskell?
(1) 编译出来的程序速度比C慢。 这条不会阻挡大家, 看看现在ruby火的那样子就知道了,大家的CPU貌似很够用。何况Haskell是编译型的语言,可以编译出高效的Native代码,又有SMP这些支持。在并发时代这一点显得尤为重要。
(2)不容易调试,这点确实,尤其是和 Python比起来,交互环境稍微难用了些,调试信息以及内省信息都不如Python人性化。被Python那种牛仔风格宠坏了,一下子到学院式风格里,挺有些不适应。 不过还好,用熟后可以很容易避免错误。
----
OK, 带好箱子和毛巾了么? 开始了!卡忙!
Recent comments
2 weeks 3 days ago
2 weeks 4 days ago
6 weeks 2 days ago
7 weeks 1 day ago
7 weeks 2 days ago
8 weeks 3 days ago
8 weeks 4 days ago
8 weeks 4 days ago
10 weeks 23 hours ago
10 weeks 3 days ago