什麼是函數式編程? C語言爲何不是函數式語言?
函數式語言有兩個個主要的特點:1. 函數是“頭等公民”。2. 數據的“immutability”. 操作的“無副作用”,
這規避了‘鎖’。
函數式編程的函數是指數學上的函數:給定輸入固定的輸出,沒有副作用。任何語言都可以用函數式的風格,
只是難易不同罷了。
比如函數 y = f(x). 和 函數 t = g(z); 在數學上,當 t在f(x)的定義域內時,可以組成複合函數 y=f(g(z));對於第二個問題,C爲何不是函數式語言?
因爲這種效果在C裏面不能實現。
int f(int x) { print x;} ===== y = f(x) int f1(int (*g)(int)) { print g(z);} ===== y = f1(g(z)) int g(int z) {return z;} ========= t = g(z)
從上面的函數定義可以看到,當函數f(x)的參數定義爲int時,便不能將函數g(z)作爲形參傳遞給它。
反過來看函數f1()也不能接受int作爲參數了。於是,C達不到數學上函數的那種效果。
而在clojure裏面卻可以。
(defn f [x] (print x)) ======= y = f(x) (defn g [z] z) ======= t = g(z)
這時,(f (g 3)) 和 (f 3) 的結果是一樣的,達到了數學上的效果。
再者,C也不具有函數式語言的特點2.常見的函數式語言有哪些?
coljure、scala、Haskell。
爲什麼如python/javascrip這些語言不是函數式語言呢,因爲他們不具備函數式語言的特點2.
什麼是函數式編程? C語言爲何不是函數式語言?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.