隨手寫寫Functional programming (函數式編程)
圖源取自: https:// www.fpcomplete.com/blog/ 2017/04/ pure-functional-programming 簡述:Functional programming 通常要注意以下特性,並建議在學習上套用數學而非程式下 去看,不然會很痛苦XD 關鍵字: #functional_programming #Pure_function #First _class #High -order_function #Currying #Closure 一. Pure function (純函數) Pure function 只談兩件事情 1. 每次,同一筆輸入得到相同的輸出 2. 不會產生 side effect(副效應) 這意味著函數將會是 stateless 的,不會去干擾外面的世界,而且隨時可以複製貼上與移除 。系統上來看,節點可以隨時關掉或開啟新的。在 unix philosophy 上來看,每個小工具的輸入跟輸出可以輕鬆組合,而且不會 有額外 state 造成難以控制的變數。程式上來看,就是每段程式碼可以輕 鬆測試,組合。 ex: 在工廠裡面的作業員,每個人都是獨立的,隨時都是可以補 充或淘汰,最好做事情時不要來請教我,不然我會很煩(s ide effect),或是日久生情(stateful)。 這種思維下用人的公司,裡面員工只是員工,不是夥伴。 二. First-class (Function/......) 這個其實很容易的,簡單來說,就是 functnio 在底層的身份地位與變數相等,也就是說 Double, Int, Function 是相等地位,彼此的位置可以調動。在底層來看,原本 heap 純放變數位置的地方也可以放入 function。 這個概念一定要建立起來,後面的三個特性才會順。 三. High-order Function High-order function 表輸入值後,可以得到一個函數或是普通輸出,就如同數學 的高階一樣,對函數 x^2 進行一次微分得到 2*x,我把 x^2 丟進去裡面得到 2*x 出來。 定義 f(x) = x +1, g(x) = x * x, f(g(x))且 x = 2 時,輸出等於多少?...