趣味函式式程式設計聖經

2022-09-28 03:06:13 字數 1670 閱讀 8175

第一天上帝看到約翰麥卡錫發明了表處理語言 lisp,卻只用來學術研究,很是傷心,就把 lisp 直譯器的秘密告訴了他的學生史蒂芬羅素,史蒂芬羅素將eval函式在ibm 704機器上實現後,函式式程式設計的大門第一次向人類開啟了。

第二天這個平行宇宙的上帝思想獨特,他說:「 要有不變數」

上帝又說: 「函式應該是純粹的(純函式)」

不能修改傳遞給函式的變數!

不能修改全域性變數!

對於同樣的輸入引數,返回值總是相同的!

下面的函式是被允許的,每次呼叫,返回值都相同,可以安全地呼叫,直到宇宙毀滅。

這樣的函式在函式式宇宙中是不允許的,因為第二次呼叫就會導致函式式宇宙的毀滅。

這個函式是不被允許的,它竟然想修改輸入引數!

如果函式返回了乙個新的陣列,而沒有改變原有的值,那函式式上帝很高興。

人類對於上帝立下的規矩表示迷惑不解: are you kiding me ?

第三天人類嘗試著寫程式,由於不變數的規定,發現連個最基本的for 迴圈都搞不定。

人類迷惑不解:「有沒有搞錯, 我們怎麼寫迴圈?」

上帝說:「你們用迴圈幹什麼?」

人類寫了一段**。

上帝說:要有遞迴!

上帝也寫了一段**:

人類說:「這雖然能完成工作,但是好像不www.cppcns.com太直觀程式設計客棧啊!再說,親愛的上帝,如果我那個list容量很大,遞迴層次很深,會不會出現棧溢位?」

上帝說:「沒事,我有尾遞迴,保證不溢位。這種遞迴的寫法,你們慢慢就習慣了。」

程式設計客棧第四天

上帝發現很多函式大體上都是相同的,只有部分細節不一樣,有很多重複**,太浪費了。

上帝說:「要有高階函式!」

讓函式來生成函式,把公用的部分抽取出來,不共用的部分與共用部分能組合起來。

上帝提供了幾個很好用的高階函式,如map,filter, fold等,讓人類快速高效地去操作集合資料。

第五天上帝對自己的工作很滿意。彷彿程式世界的框架已經基本完成,只剩下邊邊角角的實現了。

可是這個宇宙的人類總是抱怨函式式程式設計太難,看到這裡的上帝不願意改變,有很多人都穿越到編號為s-87那個所謂「物件導向」的宇宙去了。

上帝嘆了口氣:「你們吶,目光短淺,摩爾定律已經失效,多核時代已經來臨,我們函式式程式設計天生是為併發程式設計而生的啊,你看看函式沒有side effect,不共享變數,可以安全地排程到任何乙個cpu core上去執行,沒有煩人的加鎖問題,多好啊!」

過了兩天,隔壁 s-87 宇宙的物件導向上帝來串門了。

物件導向上帝說:「親愛的函式式上帝,聽叛逃者,不,投誠者,啊,是穿越到我那裡的人說,你這個宇宙有個叫做函式式程式設計的寶貝?」

函式式上帝:「還寶貝?!人都跑光了!」

「你給我講講吧,到時候我再勸他們回來。」

函式式上帝於是給他講了自己創世紀時立下的規矩,還講了很多他打算在第6天,第7天告訴人類的知識,什麼currying, 惰性求值,巨集(macro)等等。

物件導向上帝表示感謝,喜滋滋地回去了。

後來,函式式上帝聽說物件導向的宇宙出現了不少混合式風格程式設計的語言 oop + fp (functional programming),也就沒多少人再回到自己的宇宙了。

函式式上帝什麼都沒說,嘆了口氣。

第六天函式式上帝決定休息。

www.cppcns.com第七天

函式式上帝繼續休息。

這就是為什麼函式式世界的程式設計師能休息兩天的來歷。

python 趣味函式式程式設計

author xuefeng 1.物件導向 華山派 類 class 2.面向過程 少林派 過程 def 3.函式式程式設計 逍遙派 函式 def 函式與過程的簡單講解 函式 deffunc1 testing print in the func1 return 0 過程 deffunc2 testin...

Windows程式設計「聖經」

windows程式設計 聖經 十年依舊暢銷不衰的神品 傳奇大師帶你走入windows程式設計聖殿 windows程式設計最舉足輕重的書當然就是charles petzold的programming windows。你還沒有讀過嗎?暈,趕快去買一本!windows tech journal 本書讓你如...

Windows程式設計「聖經」

windows程式設計 聖經 十年依舊暢銷不衰的神品 傳奇大師帶你走入windows程式設計聖殿 windows程式設計最舉足輕重的書當然就是charles petzold的programming windows。你還沒有讀過嗎?暈,趕快去買一本!windows tech journal 本書讓你如...