柯里化的前生今世(九):For Great Good

關於

本文是系列文章中的第九篇,

上文第二~八篇中,我們學習了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月在美國俄勒岡州的波特蘭,

舉行了一次關於函數式編程語言和計算機體系結構的會議,FPCA87。

會議看到了函數式編程社區的現狀,

社區中已經出現了十幾個非嚴格語義的純函數式編程語言,

它們全都表現力豐富,而且建立在語義學基礎之上。

人們看到,沒有一門公共語言妨礙了這些語言的廣泛使用。

於是,會議達成共識,決定設計一門新的語言,用來更快的交流新想法,

這樣可以保證基礎更加牢固,也可以推動實際生產環境中的使用。

對於那些想學習函數式語言的人們,也方便了許多。

這門語言就是Haskell,以邏輯學家Haskell B. Curry命名。

方法論

學習Haskell是一件困難的事情,會讓你想起第一次寫程序時的感覺。

它非常有趣,而且強迫你Think different。

Haskell社區中流行著這樣一句話,我認為對學習非常有幫助,

Dont sweat the stuff you dont understand immediately. Keep moving!

(別在不懂的地方打轉,先繼續讀下去!

我覺得這句話說的極好,也是軟體相對於其他行業的根本區別。

編程領域中的很多概念,通常會涉及尚未學到的知識點,

因此,寄希望於在遇到的那一刻去理解它,幾乎是不可能的。

這就要求我們敢於放棄,先強行建立模糊的印象,等有機會不斷的回來再看。

下文

Haskell有著純正的血統,(此處應該加引號,「純正」

這門語言是一群非常聰明的人設計的,他們每個人都有 PhD 學位。

Haskell was made by some really smart guys (with PhDs)

下文我們準備從Haskell語言的基礎概念談起,然後循序漸進,

等熟悉之後,再來探討Monad和Category Theory這些有趣的話題。


參考

History of Haskell

Haskell趣學指南 · GitBook

編程語言學習曲線


推薦閱讀:

要獲得「機器學習或數據科學」的工作,到底選哪種編程語言更好?
學編程有哪些好點的網站?
為什麼要學習編程設計
一晚上糊出一個語言「前端」
如何實現feed流

TAG:Haskell | 編程語言 |