托馬斯·沃森(時任IBM董事長)說過一句著名的話,「我想全世界只有五臺計算機的市場」。 那是1948年,當時,每一個人都認爲計算機只會被用於兩件事情:數學和工程。 即便是技術上最大膽的預想也不會認爲有一天計算機可以把西班牙語翻譯成英語, 或者模擬整個天氣系統。在那時最快的計算機是IBM的SSEC,每秒能計算50次,顯示終端要在15年後纔出現, 多任務處理意味着多個用戶終端共享一個單線程。晶體管改變了一切,然而對技術的遠見沒有跟上。 在1977年,Ken Olson(DEC創始人)說過另外一個愚蠢的預言:「任何人都沒有理由想在家裏擁有個計算機」。html
對於咱們來講很明顯計算機不僅是爲科學家和工程師所用,但這只是過後諸葛。在70年前認爲計算機只能做數學計算是很正常的。 沃森不只沒有意識到計算機會改變社會,他尚未意識到數學的改革和演進的能力。算法
不過計算機和數學的潛力並不是被全部人忽視。約翰·麥卡錫在1958年發明了Lisp,這是一個革命性的基於算法的語言, 它把計算機帶入了新紀元。從那開始,Lisp對使用抽象層的思想(編譯、解釋、虛擬化)起到重要做用, 這促使了計算機從一個只能用於數學的機器變成了今天這樣。編程
從Lisp到Scheme,一個JavaScript的直接原型。如今它給咱們帶來了一個輪迴。若是計算機在覈心上只是一個作數學的機器, 那麼它在以數學爲基礎編程範式上具備優越性是合理的數組
這裏所說的「數學」並非指計算機明顯能作的數字運算,而是要描述爲離散數學:對於離散的、 對於諸如邏輯上的聲明或者計算機語言命令的數學結構的研究。 經過把代碼做爲離散的數學結構來對待,咱們能夠把概念和想法應用到數學上。 這也就是爲何函數式編程在人工智能、圖譜搜索、模式識別以及其它計算機科學中具備挑戰性的領域裏具備如此重要的地位。安全
這一章咱們將針對平常編程中的問題對一些概念和它們的應用進行試驗,包括:函數式編程
利用這些概念咱們能夠輕鬆安全地寫出整個庫和API。而且咱們要從對範疇論的解釋開始一直到它在JavaScript裏的實現。函數