上文第二~八篇中,我们学习了Racket语言,它很有代表性,是一种Lisp方言。很多概念用Racket描述会更加简便。
我们介绍了高阶函数,词法作用域,闭包以及continuation,这些概念对理解函数式编程来说十分重要。
然而,偏见却经常起于片面。只学习一种语言,会让我们对事物的同一个侧面产生习惯。事实上,我们需要多样化的角度,也需要经常更换思维方式。
这对学习新知识很有帮助,有些时候,我们理解不了某些概念,很有可能是因为这个概念被描述的不够全面,我们经常走到深入思考这一特定描述的误区。实际上,我们应该尝试寻找不同的描述方式,换个角度重新审视。
在第一篇中,我们提到了美国著名的数学家,逻辑学家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这些有趣的话题。
History of HaskellHaskell趣学指南 · GitBook编程语言学习曲线
