柯里化的前生今世(九):For Great Good
03-06
關於
本文是系列文章中的第九篇,
上文第二~八篇中,我們學習了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流