什麼是函數式編程? C語言爲何不是函數式語言?

  • 什麼是函數式編程? 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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章