函數式編程思想

對於函數式編程來講,其只關心,定義輸入數據和輸出數據相關的關係,數學表達式裏面實際上是在作一種映射(mapping),輸入的數據和輸出的數據關係是什麼樣的,是用函數來定義的。html

左耳朵耗子:什麼是函數式編程

http://www.yxtvg.com/toutiao/5413179/20180212a04ro500.html。程序員

 

函數式編程思想:先構造計算樹,而後執行計算樹。編程

 

函數式編程的開發過程是編寫計算實現、調用約定、和計算結構的過程;promise

執行的過程是履行計算約定的過程。app

與面相對象作比較:編程語言

面向對象是結構的構建,要素是對象與關係;函數式編程

函數式編程是計算的構建,要素是函數和在聽從調用約定的樹上行走的信息流。函數

 

函數式結構樹的構建過程和執行過程都聽從信息流約定。lua

調用的時機和順序都有信息流約定來規範。spa

 

函數式結構樹的構建過程只是計算的綁定的過程;從執行的角度看它有另外一個術語「惰性求值」:

函數式編程語言還提供惰性求值(Lazy evaluation,也稱做call-by-need),是在將表達式賦值給變量(或稱做綁定)時並不計算表達式的值,而在變量第一次被使用時才進行計算。

某些編程語言缺省延遲表達式的求值,另外一些提供函數或特殊語法來延遲求值。在 Miranda 和 Haskell 中,缺省延遲函數實際參數的求值。在不少其餘語言中,可使用特殊語法明確懸置計算來延遲求值(好比 Scheme 的 "delay" 或 "force"),更通常的經過把一個表達式包裝在 thunk 中。表示這種明確延遲求值的對象叫作預期或承諾。

The benefits of lazy evaluation include:

  • The ability to define control flow (structures) as abstractions instead of primitives.

 

結構樹的生成與執行:

調用約定、參量約定、信息流約定、promise;

信息流對參量逐步賦值的 過程。

生成的過程是將計算進行保存,而不是使用計算求值的過程。

 

函數式編程須要一些基礎設施進行支撐。

根和乾的部分由基礎設置完成;

枝幹和葉子節點由程序員完成。

函數式編程的運行環境都會提供最基本的運算。

 

數據和事件在這個結構樹上只至關於信號。

 

統領全局的是輸入、輸出及處理流程的邏輯,是信息處理的流程。

要關注輸出在哪裏;一般來講,程序員所作的部分只是整個信息處理系統的一部分。

 

函數式編程與信息處理系統有不少相似的地方;

都是輸入信號,而後通過一系列的子系統的處理,最後拿到指望的結果。

 

它的使用場景也有上面的相似性決定:即處理信息和信號流。

 

開發的過程即爲爲這個信號處理系統添加子系統。

 

不同的地方在於信號處理系統是單向的;而函數式編程須要使用棧的結構來返回遞歸和嵌套處理過的值,也包含最終的值。

相關文章
相關標籤/搜索