关于
本文是系列文章中的第九篇,
上文第二~八篇中,我们学习了Racket语言,它很有代表性,是一种Lisp方言。
很多概念用Racket描述会更加简便。
我们介绍了高阶函数,词法作用域,闭包以及continuation,
这些概念对理解函数式编程来说十分重要。
然而,偏见却经常起于片面。
只学习一种语言,会让我们对事物的同一个侧面产生习惯。
事实上,我们需要多样化的角度,也需要经常更换思维方式。
这对学习新知识很有帮助,
有些时候,我们理解不了某些概念,很有可能是因为这个概念被描述的不够全面,
我们经常走到深入思考这一特定描述的误区。
实际上,我们应该尝试寻找不同的描述方式,换个角度重新审视。
Haskell Curry
在第一篇中,我们提到了美国著名的数学家,逻辑学家Haskell Curry,
当时我们对他的生平进行了非常详细的介绍,因为,柯里化是用Curry来命名的。
除此之外,那是因为还有一门编程语言用Haskell来命名。
Haskell是一种通用的,纯函数式编程语言,
其中包含了很多编程语言研究领域中的新概念。
Haskell提供了高阶函数,非严格语义(non-strict semantics),静态多态类型,
用户自定义的代数数据类型,模式匹配,列表解析(list comprehension),
模块系统,monadic IO系统。
Haskell包含了丰富的原始数据类型,
包括列表,数组,任意精度的整数,以及浮点数。
Haskell是非严格(non-strict)函数式语言领域多年研究的结晶。
An expression language is said to have non-strict semantics if expressions can have a value even if some of their subexpressions do not
历史
1987年9月在美国俄勒冈州的波特兰,
举行了一次关于函数式编程语言和计算机体系结构的会议,FPCA'87。
会议看到了函数式编程社区的现状,
社区中已经出现了十几个非严格语义的纯函数式编程语言,
它们全都表现力丰富,而且建立在语义学基础之上。
人们看到,没有一门公共语言妨碍了这些语言的广泛使用。
于是,会议达成共识,决定设计一门新的语言,用来更快的交流新想法,
这样可以保证基础更加牢固,也可以推动实际生产环境中的使用。
对于那些想学习函数式语言的人们,也方便了许多。
这门语言就是Haskell,以逻辑学家Haskell B. Curry命名。
方法论
学习Haskell是一件困难的事情,会让你想起第一次写程序时的感觉。
它非常有趣,而且强迫你Think different。
Haskell社区中流行着这样一句话,我认为对学习非常有帮助,
Don't sweat the stuff you don't understand immediately. Keep moving!
(别在不懂的地方打转,先继续读下去!
我觉得这句话说的极好,也是软件相对于其他行业的根本区别。
编程领域中的很多概念,通常会涉及尚未学到的知识点,
因此,寄希望于在遇到的那一刻去理解它,几乎是不可能的。
这就要求我们敢于放弃,先强行建立模糊的印象,等有机会不断的回来再看。
下文
Haskell有着纯正的血统,(此处应该加引号,“纯正”
这门语言是一群非常聪明的人设计的,他们每个人都有 PhD 学位,
他们聚在一起就是想设计一个吊到爆的编程语言。
(to design a kick-ass language。。
下文我们准备从Haskell语言的基础概念谈起,然后循序渐进,
等熟悉之后,再来探讨Monad和Category Theory这些有趣的话题。