SICP歸納 2 高階函式和資料抽象

2021-09-07 04:40:39 字數 1755 閱讀 8881

書中展示了非常多有趣的句法(syntax)。

如今我們要讓思想進一步的抽象。寫這篇部落格的時候並未學完整本書。更不敢說對書中的內容有乙個多深的領悟。但我一路學習過來。就感覺書中的演示樣例越來越抽象,作者所引導我們的也是如此方向。博文也會持續更新下去,伴隨著我的理解。

在這個專欄的【scheme歸納】4 高階函式中已經初步介紹了什麼是高階函式(higher-order procedures)。

而在這一節中,將用高階函式來做抽象。書中分了很多小節來逐一介紹這一主題。

在「過程作為引數」中,書中用了許很多多的類似演示樣例來概括起乙個抽象的操作。lambda用和define同樣的方式來建立過程。唯一的差別不過不為過程提供引數。這就是函式式程式設計和命令式程式設計的最大差別了,在c++等語言中我們總是會定義很多的變數和常量,而在scheme中一路下來差點兒都是函式。函式與函式之間也不再是用變數等做引數,再用乙個return來返回。它能夠用過程來作為引數,甚至過程還能夠作為返回值。

在第38頁前後的各種求和中,這些程式差點兒是同樣的,沒有太多的差別。

它們都具有同樣條件,同樣的謂詞和同樣的結果,而且這些代換方式都是如此類似。假設如今細緻回憶。我們至今為止已經學習了哪些語法,哪些組合,哪些抽象,還有沒有學到的常見模式。作者說,計算機應讓人快樂。而不是人讓計算機快樂。

所以人們會建立讓自己更easy編敲**、更易於閱讀的程式語言。因此就引進了一切抽象的東西。

至今為止一直談論的過程。不過在提醒我們關於這個語言的框架,我們用原始的東西來構建乙個系統。這當中用到了一些組合的手段,通過它把原始的東西做成複雜的事物;用抽象技術來利用複雜的事物以及給它們命名,這就像是搭積木一般。還能夠用高階函式來實現很多常規的方法。就像是書中第45頁的不動點搜尋和牛頓法。通過組合起這些抽象將獲得無窮的力量。

而這一切的關鍵思想就是去建立乙個分層次的系統。因此舉例來說,當我們在寫乙個求平方根的程式時,程式的某一部分就是用了乙個名為good-enough的函式,而在那之間則存在著抽象。作者舉例說。假設我們和george一起寫乙個求平方根的程式。而george的工作就是寫good-enough。而我們並不用去關心這個函式是怎樣進行的。甚至即是george在這裡函式裡用了harry寫的抽象過程,我們也不用去關心甚至不用知道有這樣乙個過程或者harry是不是存在。

由於good-enough的細節是由george來完畢的。在乙個大型系統中。我們很多很多級別的抽象屏障(書中第58頁解說了抽象屏障)。而我們要做的就是一遍一遍的去實施程式。

關於資料方面的問題,我們首先要將源資料放在一起組成比較複雜的復合資料。當我們在一組簡單資料之上建立復合資料的時候要用到抽象的方法。其次。還要建立系統的層次。書中有有理數的樣例來介紹了這一點。

在lisp上有乙個操作符叫做cons。其有2個引數x和y。然後返回乙個序對pair。所謂的構造就是通過cons操作,在後面的學習中將會發現,不管是構造佇列,甚至是構造流都是通過cons操作。書名中的structure為名詞構造。結構,動詞的構造是construct。

上篇博文在控制複雜性部分用了級聯一次,第79頁就介紹了模組化結構。在真實的訊號處理應用中,設計者通常總是從標準化的過濾器和變化裝置族中選出一些東西,通過級聯的方式構造出各種系統。所謂級聯,就是將2種以上的裝置、訊號等通過某種方式連線到一起。

可能我們臨時在實際中還用不到它,但不管怎樣。資料抽象都是乙個強大的技術。

對於資料抽象計數。我最為驚嘆的便是church計數。也即是練習2.6,通過lambda演變就能夠建立出全部的自然數和加減乘除。當然了。我的理解有限,不過我相信加減乘除之外的操作也是能夠實現的。這道題也有一篇博文來解答:【sicp練習】47 練習2.6

感謝訪問,希望對您有所幫助。

SICP歸納 2 高階函式和資料抽象

在這個專欄的 scheme歸納 4 高階函式中已經初步介紹了什麼是高階函式 higher order procedures 而在這一節中,將用高階函式來做抽象。書中分了許多小節來逐一介紹這一主題。在 過程作為引數 中,書中用了許許多多的相似示例來概括起乙個抽象的操作。lambda用和define同樣...

React 知識點歸納 純函式和高階函式

一類特別的函式 只要是同樣的輸入,必定得到同樣的輸出 必須遵守以下一些約束 a.不得改寫引數 b.不能呼叫系統 i o 的 api c.能呼叫 date.now 或者 math.random 等不純的方法 reducer 函式必須是乙個純函式 理解 一類特別的函式 a.情況 1 引數是函式 b.情況...

Python 高階函式(2)

sorted 函式也是乙個高階函式,它還可以接收乙個key函式來實現自定義的排序。key指定的函式將作用於list的每乙個元素上,並根據key函式返回的結果進行排序。假設我們用一組tuple表示學生名字和成績 l bob 75 adam 92 bart 66 lisa 88 請用sorted 對上述...