標籤:

函數式編程,Haskell,範疇論的關係

在我剛開學習函數式編程的時候,我對函數式編程的理解就是:函數式是非常簡單的世界,只有普通數據和函數。其實函數式編程並沒這麼簡單,如果函數式編程就是掌握使用函數那其實大家都是會函數式編程的。

函數式編程遠沒這麼簡單,還有一個數學分支理論範疇論(category theory)在背後支持著它。函數式編程,Haskell,範疇論三者之間的關係大概是這樣的。範疇論是支持函數式編程的理論之一,而Haskell是一門純函數式語言。

為什麼使用範疇論呢?是這樣的,範疇論主要關注組合(composition)。稍微資深一點的程序員就會發現,平時編程的時候,如果你能把程序切成很多小的模塊,然後組合這些模塊成為想要的程序是一個非常好的編程思路。所以組合,或者說分而治之,的思想是很重要的。因為人的大腦並不是萬能的,一個模塊如果過於複雜,維護起來就非常難,體現在編程上就是,我們開發進度越來越慢,開發功能的速度越來越接近bug產生的速度O.O。

ok,既然範疇論只是關於組合的理論,不過我們的早就用上模塊化的範式了。比如面想對象編程不就是把程序分成很多個對象,然後組合對象嗎。是的,不過這些模塊化不夠安全,各個模塊之間很多情況下都是互相影響的(也就是說,模塊不獨立,測試的時候繞不開互相影響的其他模塊)。而函數的組合,互相之間是不會影響的。在函數式編程中,最基本的組合是函數的組合,在Haskell一個非常基本的操作符 . ,就是用來組合函數的。這個 . 與我們上學時候學習的複合函數是一個東西,(f . g)(x) = f(g(x))。

函數式編程,Haskell,範疇論這三個概念如果展開講其實講一天一個月都講不完,所以暫時就講到這裡。看完這篇文章肯定對於這些概念還是比較模糊的,我還會繼續寫一些別的文章補充這方面的內容。

推薦閱讀:

Coq學習筆記11:策略和證明自動化
我願意在她手掌之中(一):範式
持久化數據結構學習筆記——序列

TAG:函數式編程 |