函數式編程對數據處理、機器學習等工作有什麼意義?
02-01
最直觀的感覺就是好用。隨著經驗的增加,你會發現函數式風格非常適合處理數據流,因為你很容易抽象出一些通用的模式(而你也不需要太多代碼來描述這些模式)。
比如典型的map,reduce,filter,它們就是一套非常通用的工具。再比如尾遞歸形式天生就是向量化的,非常適合表示高度形式化的迭代過程。
實際上只要函數可以方便的構造和傳遞(first-class),那麼你就會發現語言的表達力上升了一個台階。而如果你盡量堅持無副作用的約束,你往往還能得到思維上的解放(你不再會被某些奇怪的問題所困擾)
函數式編程可以加快開發數據處理類軟體的速度。
現在的計算機工作都涉及大量數據,而很多時候我們並不知道那一個模型較好,所以我們需要很快速更改模型嘗試,而函數式編程可讓我們做到。試想像一個程序有大量loop是多難維持,但函數式代碼可縮短代碼更讓程序員理解。君不見很多數據處理的東西如Python和R都有很多函數式的東西?
另外,函數式編程衍生現代平行運算中的MapReduce,而MapReduce本來是函數式編程的東西,所以做平行運算更自然。
當然,函數式編程也有弊端,我在另一回答中也提過了(函數式編程有什麼弊端?):
最近開始認真接觸函數式編程,講點兒感受吧:
函數式編程的確可以把一些演算法的實現濃縮成很少行數,這是優勢;可是這濃縮的方法五花百門,也因各人的思維差別很大,編寫的方法也比其他範式變化更多,編程時很難選擇合適的方式,也使代碼的可讀度降低。另外,函數式編程的邏輯跟機器有差,運行相對較慢。但我相信如果用合適的optimization是可以很容易解決的。不過函數式編程的優點也很明顯,有很多演算法的邏輯會跟突出準確,在並行計算也容易實現得多。
Haskell Data Analysis Cookbook不知道這個算不算。我覺得,意義在於:對內行,你又多一個好玩的工具了。對外行/半外行:你又多了個吹牛的資本了。不知道寫項目申請書的時候,寫上函數式編程能不能高端一點?
它使得編程的效率提高,編程更有個性化、無固定格式,使得開發人員將更多的時間用在了演算法的設計和想法的擴展,使得開發人員的能力得到了更好的提高。
沒意義
推薦閱讀: