官术网_书友最值得收藏!

前言

《計算機程序的構造和解釋》(SICP)給讀者介紹計算的核心思想,采用的方法是為計算建立一系列的概念模型。第1章到第3章涵蓋了所有時新的高級程序設計語言所共有的程序設計概念。在原SICP的兩個版本里,程序設計示例用程序設計語言Scheme描述,該語言具有極簡的風格和基于表達式的語法形式,這些使原書可以聚焦于基礎概念,而不是所選語言本身的設計。第4章和第5章使用Scheme構造Scheme的處理器,用以加深讀者對概念模型的理解,并探索了語言的一些擴充和替代結構。

自1984年出版,以及1996年第2版出版后,SICP被全世界許多大學和學院選作教科書。新加坡國立大學(NUS)1997年開始開設基于SICP的引論課程CS1101S。20世紀90年代中期,Python、JavaScript和Ruby等語言發展起來,它們都共享了Scheme的核心設計元素,但采用了更復雜的基于語句的語法結構,使用了人們更熟悉的代數表達形式(中綴形式)。這些語言的興起,導致一些教師調整基于SICP的課程,典型方法是把其中的示例程序都翻譯為他們所選的語言,再加上一些特別的與語言相關的材料,并略去原書的第4章和第5章。

把SICP改編到JavaScript

在NUS,把SICP的第2版改編到JavaScript(SCIP JS)的工作開始于2008年,2012年CS1101S課程轉到了JavaScript。ECMAScript 2015語言標準引進了lambda表達式、尾遞歸和分程序作用域的變量和常量,這些使有關的改編更接近原書。我們對SICP的實質性修改不多,只出現在JavaScript與Scheme的差異使我們感到不得不修改的地方。這本書只涉及JavaScript的很少一部分,所以絕不建議讀者用它學習這個語言。舉例說,JavaScript對象的概念在本書里就完全沒有提及——而對象被認為是該語言最基本的成分。

通過加入一些模擬Scheme原語的庫,包括支持表結構的庫,并相應修改正文中的文字,翻譯第1~3章的程序是直截了當的。然而,轉到JavaScript,也迫使我們對第4章和第5章的解釋器和編譯器做了一些實質性的修改,以便處理返回語句。Scheme的基于表達式的語法里沒有返回語句,而這種語句是基于語句的語言中不可或缺的特征。

通過使用JavaScript,第1章到第3章給讀者介紹了今天大多數主流語言的語法風格。然而,在第4章,語法風格產生了重大變化,因為把程序直接表示為數據結構已經無法看作是理所當然了。但這也為我們提供了一個機會,在4.1節為讀者介紹語法分析,這是程序設計語言處理器的一個重要組成部分。在4.4節,JavaScript嚴格的語法結構使展示邏輯程序設計系統的工作大大復雜化,顯示出用JavaScript作為程序語言設計工具的局限性。

使用SICP JS資源

MIT出版社有關SICP JS的網頁上有針對本書使用者的支持鏈接,那里提供了書中所有程序和擴展教學資源,包括一大批附加練習,以及安排典型的大學一學期課程的SICP JS選學子集的建議。本書中的JavaScript程序可以在符合ECMAScript 2020規范(ECMA 2020)的任何JavaScript解釋器推薦的嚴格模式下運行。MIT出版社的網頁包含一個名為sicp的JavaScript包,它提供了本書中當作“原語”的所有JavaScript函數。

致讀者

我們真誠地希望,如果你在閱讀本書時第一次遇到程序設計,你將能運用自己對計算機程序的構造和解釋的新理解去學習更多的程序設計語言,包括Scheme和完整的JavaScript。如果你在拿起SICP JS之前已經學過JavaScript,你可能得到有關該語言背后的基本概念的一些新見解,并看到只需要多么少的東西就可以得到多么多。如果你遇到SICP JS時已經學過有關原SICP的知識,你可能看到熟悉的思想如何用一種新形式表達,還可以欣賞在線的對照版本(在本書的網頁上可用),它使你可以并排地對照著看SICP和SICP JS。

Martin Henz和Tobias Wrigstad

主站蜘蛛池模板: 揭东县| 房产| 桐梓县| 乌鲁木齐县| 雅安市| 建德市| 梅州市| 敦煌市| 武强县| 郎溪县| 嫩江县| 株洲市| 那曲县| 临西县| 武川县| 兰西县| 泊头市| 如东县| 永兴县| 梅州市| 连平县| 长兴县| 广州市| 栾川县| 吉木乃县| 高尔夫| 无锡市| 永丰县| 沽源县| 平遥县| 洱源县| 梧州市| 绥滨县| 申扎县| 安达市| 千阳县| 高要市| 会理县| 醴陵市| 梅河口市| 裕民县|