函數語言程式設計
介紹
程式語言有量大流派,命令式(imperative)和函式式(functional).
指令式程式設計語言(比如C, C++, Java, Python等),通過給計算機一系列指令來完成任務,和這些指令配合的是資料的變化,比如宣告一個變數a=5
,稍後做一些操作,這個a
會變成6或者其他值。你可以通過控制指令執行邏輯和流程來完成這樣的操作,得到結果。這個過程和計算機本身的設計比較接近。
當代計算機是馮諾伊曼結構的,基於CPU+記憶體+匯流排的結構構建整個計算本身。
在純函式的語言中,你並不是告訴計算機一步一步的指令,而是告訴計算機如何計算。比如說,計算n的階乘,在純函式中,描述是n的階乘=n*n-1的階乘。
你不能改變一個變數的值,因為你已經宣告瞭a=5
,a就是5,無法改變;事實上,在純函式中,根本就沒有變數這個概念。
在純函式語言中,函式是沒有副作用的,對於相同的輸入引數,純函式保證會有相同的輸出。
以haskell為例
haskell函式定義的格式
函式名 :: 引數1的型別 -> 引數2的型別 -> ... -> 結果的型別
函式名 引數1 引數2 .. = 函式體
add :: Int -> Int -> Int
add a b = a + b
複製程式碼
是不是很類似數學公式:f(x,y)=x+y
; 是的,函數語言程式設計語言起源於數學。
lambda表示式
λ表示式是書寫函式的一種方式,如下所示:
函式名 :: 引數1的型別 -> 引數2的型別 -> ... -> 結果的型別
函式名 = \引數1 -> \引數2 -> ... -> 函式體
add :: Int -> Int -> Int
add = \a -> \b -> a + b
--簡化寫法
add = \a b -> a + b
複製程式碼
map
資料轉換
monand
深入學習的參考材料
待續