函數語言程式設計語言的魅力:淺談 Haskell
1.What’s Haskell?
Haskell 的命名源自美國邏輯學家 Haskell Brooks Curry,其在數學邏輯方面的工作使得函數語言程式設計語言有了廣泛的基礎。
Haskell 是 1990 年在程式語言 Miranda 的基礎上標準化的,並以λ演算為基礎發展而來,具有“證明即程式、結論公式即程式型別”的特徵。與我們熟知的 C++ 等指令式程式設計語言不同,Haskell 是一種純函數語言程式設計語言,它將電腦運算視為函式的計算,函式與其他資料型別一樣,處於平等地位,可以賦值給其他變數,也可以作為引數,傳入另一個函式,或者作為別的函式的返回值。
2.Why Haskell?
理解函數語言程式設計將能夠讓我們成為一個更優秀的開發者,對於程式碼和程式設計,它將給予你一個新的視角。
模組化是成功程式設計的關鍵,而函式程式設計可以極大地改進模組化。在函式程式設計中,程式設計人員有一個天然框架用來開發更小的、更簡單的和更一般化的模組, 然後將它們組合在一起。
得益於函式式語言的特性,我們可以對程式碼快速進行改寫,而且通常 bug 會更少,這在版本迭代過程中是非常有幫助的 1。
運用 Haskell 可以寫出更簡潔優雅的程式,如我們 Matrix 上程式設計 B1003 求
#include<stdio.h>
#include<math.h>
int main()
{
float a,b,c,d;
float x1,x2;
scanf("%f%f%f",&a,&b,&c);
d=sqrt(b*b-4*a*c);
x1=(-b-d)/(2*a);
x2=(-b+d)/(2*a);
printf("%.3f %.3f\n",x1,x2);
}
而用 Haskell 則只需
roots :: Float -> Float -> Float -> (Float,Float)
roots a b c = (x1,x2) where
x1 = e - sqrt d/(2*a)
x2 = e + sqrt d/(2*a)
d = b*b-4*a*c
e = -b/(2*a)
儘管函數語言程式設計語言已出現 50 餘年,但其最近越來越受到重視,為很多大牛所推崇。很多著名網際網路公司也在使用 Haskell 進行部分運作,如 Facebook 利用 Haskell 進行併發資料訪問和處理垃圾郵件資訊 2,滴滴出行用 Haskell 支撐內部交通資料視覺化後端 3。
而從硬體角度來講,在摩爾定律逐漸失效、單晶片效能遇到瓶頸的今天,函數語言程式設計語言在平行計算方面的優勢也愈發突出。
綜上,在本科階段就入門 Haskell 對我們來說是比較有好處的。
3.How Haskell?
有意嚐鮮 Haskell 的同學可以訪問 Haskell 官網 下載安裝 Haskell Platform , 之後執行 GHCi 進行程式設計。我們無需定義一堆變數即可直接運用函式進行計算,如下圖所示: