電腦程式的構造與解釋 (JavaScript版) Structure and Interpretation of Computer Programs: JavaScript Edition

Harold Abelson 譯 裘宗燕

買這商品的人也買了...

商品描述

本書主要介紹計算的核心思想,採用的方法是為計算建立一系列概念模型。
主要內容包括:
建構過程抽象,建構資料抽象,模組化、物件與狀態,元語言抽象,暫存器機器裡的計算等。
採用JavaScript作為實例分析,但不拘泥於對語言的解釋,而是透過這種語言來闡述程式設計想法。
第1章介紹了計算過程以及函數在程式設計中扮演的角色。
第2章在第1章的基礎上提供了將資料物件組合起來形成複合數據,進而建構抽象的方法。
第3章介紹了一些幫助我們模組化建構大型系統的策略。
第4章透過後設語言抽象探究如何在一些語言的基礎上發展新語言的技術。
第5章從寄存器機器的角度出發,透過設計寄存器機器,開發一些機制,
實作重要的程式設計結構,同時給予一種描述暫存器機器設計的語言。
本書揭示電腦程式設計思想的實質是改變了人們的思考方式:從命令式的觀點去研究知識的結構。

目錄大綱

目 錄
Structure and Interpretation of Computer Programs: JavaScript Edition
譯者序
序言
1984年版《電腦程式的構造與解釋》的原序
前言
1996年SICP第2版的序言
1984年SICP第1版的序言
致謝
1996年SICP第2版的致謝
第1章 建構子抽象1
1.1 程式設計的基本元素2
1.1.1 表達式3
1.1.2 命名與環境4
1.1.3 運算子組合式的求值5
1.1.4 複合函數6
1.1.5 函數應用的代換模型8
1.1.6 條件表達式和謂詞11
1.1.7 實例:用牛頓法求平方根14
1.1.8 函數作為黑箱抽象17
1.2 函數與它們產生的計算20
1.2.1 線性遞歸與迭代21
1.2.2 樹形遞歸24
1.2.3 增長的階28
1.2.4 求冪29
1.2.5 最大公約數31
1.2.6 實例:素數檢測33
1.3 用高階函數做抽象37
1.3.1 函數作為參數37
1.3.2 用lambda表達式建構子41
1.3.3 函數作為通用的方法45
1.3.4 函數作為返回值48
第2章 建構資料抽象54
2.1 初識資料抽象56
2.1.1 實例:有理數的算術運算56
2.1.2 抽象屏障59
2.1.3 資料是什麼意思? 61
2.1.4 延伸練習:區間算術63
2.2 層次性資料與閉包性質65
2.2.1 序列的表示66
2.2.2 層次結構72
2.2.3 序列作為約定的介面76
2.2.4 實例:一個圖形語言86
2.3 符號資料96
2.3.1 字串96
2.3.2 實例:符號求導97
2.3.3 實例:集合的表示102
2.3.4 實例:Huffman編碼樹108
2.4 抽象資料的多重表示114
2.4.1 複數的表示115
2.4.2 帶標籤資料118
2.4.3 資料導向的程式設計和可
   加性121
2.5 包含通用型操作的系統127
2.5.1 通用型算術運算128
2.5.2 不同類型資料的組合131
2.5.3 實例:符號代數136
第3章 模組化、物件與狀態146
3.1 賦值與局部狀態146
3.1.1 局部狀態變數147
3.1.2 引進賦值帶來的利益152
3.1.3 引進賦值的代價155
3.2 求值的環境模型159
3.2.1 求值規則160
3.2.2 簡單函數的應用163
3.2.3 框架作為局部狀態的倉庫165
3.2.4 內部定義169
3.3 用變動資料建模172
3.3.1 可變的表結構172
3.3.2 隊列的表示179
3.3.3 表格的表示182
3.3.4 數位電路模擬器187
3.3.5 約束傳播196
3.4 並發:時間是一個本質問題205
3.4.1 並發系統中時間的性質206
3.4.2 控制並發的機制209
3.5 流218
3.5.1 流作為延遲的表219
3.5.2 無窮流225
3.5.3 流計算模式的應用230
3.5.4 流和延遲求值238
3.5.5 函數式程式的模組化與對象
   的模組化242
第4章 元語言抽象246
4.1 元循環求值器248
4.1.1 求值器的核心部份249
4.1.2 組件的表示254
4.1.3 求值器的資料結構263
4.1.4 把求值器當作程式運行267
4.1.5 以資料為程式270
4.1.6 內部聲明272
4.1.7 分離語法分析與執行275
4.2 惰性求值280
4.2.1 正則序與應用序280
4.2.2 採用惰性求值的解譯器281
4.2.3 流作為惰性的表288
4.3 非確定性計算289
4.3.1 搜尋和amb291
4.3.2 非確定性程序實例294
4.3.3 實作amb求值器300
4.4 邏輯程序設計309
4.4.1 演繹式資訊檢索311
4.4.2 查詢系統如何運作320
4.4.3 邏輯程式設計
   是數理邏輯嗎? 326
4.4.4 實作查詢系統330
第5章 暫存器機器裡的計算350
5.1 暫存器機器的設計351
5.1.1 一種描述暫存器機器的語言352
5.1.2 機器設計的抽象355
5.1.3 子程序357
5.1.4 使用棧實作遞歸360
5.1.5 指令總結364
5.2 暫存器機器的模擬器365
5.2.1 機器模型366
5.2.2 彙編器369
5.2.3 指令和它們的執行函數372
5.2.4 監視機器執行378
5.3 儲存分配與廢料收集380
5.3.1 把記憶體看成向量380
5.3.2 維持一種無限儲存的假象384
5.4 明確控制的求值器389
5.4.1 分派器和基本求值390
5.4.2 函數應用的求值393
5.4.3 塊結構、賦值與聲明400
5.4.4 求值器的運作401
5.5 編譯405
5.5.1 編譯器的結構407
5.5.2 組件的編譯411
5.5.3 編譯函數應用與傳回語句417
5.5.4 指令序列的組合423
5.5.5 編譯程式碼的實例426
5.5.6 詞法地址433
5.5.7 將編譯程式碼與求值器介面435
參考文獻441
索引447
練習列表490