SICP Python 描述 第三章 計(jì)算機(jī)程序的構(gòu)造和解釋 3.1 引言

3.1 引言

來源:3.1 Introduction

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

第一章和第二章描述了編程的兩個基本元素:數(shù)據(jù)和函數(shù)之間的緊密聯(lián)系。我們看到了高階函數(shù)如何將函數(shù)當(dāng)做數(shù)據(jù)操作。我們也看到了數(shù)據(jù)可以使用消息傳遞和對象系統(tǒng)綁定行為。我們已經(jīng)學(xué)到了組織大型程序的技巧,例如函數(shù)抽象,數(shù)據(jù)抽象,類的繼承,以及泛用函數(shù)。這些核心概念構(gòu)成了堅(jiān)實(shí)的基礎(chǔ),來構(gòu)建模塊化,可維護(hù)和可擴(kuò)展的程序。

這一章專注于編程的第三個基本元素:程序自身。Python 程序只是文本的集合。只有通過解釋過程,我們才可以基于文本執(zhí)行任何有意義的計(jì)算。類似 Python 的編程語言很實(shí)用,因?yàn)槲覀兛梢远x解釋器,它是一個執(zhí)行 Python 求值和執(zhí)行過程的程序。把它看做編程中最基本的概念并不夸張。解釋器只是另一個程序,它確定編程語言中表達(dá)式的意義。

接受這一概念,需要改變我們自己作為程序員的印象。我們需要將自己看做語言的設(shè)計(jì)者,而不只是由他人設(shè)計(jì)的語言用戶。

3.1.1 編程語言

實(shí)際上,我們可以將許多程序看做一些語言的解釋器。例如,上一章的約束傳播器擁有自己的原語和組合方式。約束語言是十分專用的:它提供了一種聲明式的方式來描述數(shù)學(xué)關(guān)系的特定種類,而不是一種用于描述計(jì)算的完全通用的語言。雖然我們已經(jīng)設(shè)計(jì)了某種語言,這章的材料會極大擴(kuò)展我們可解釋的語言范圍。

編程語言在語法結(jié)構(gòu)、特性和應(yīng)用領(lǐng)域上差別很大。在通用編程語言中,函數(shù)定義和函數(shù)調(diào)用的結(jié)構(gòu)無處不在。另一方法,存在不包含對象系統(tǒng)、高階函數(shù)或類似whilefor語句的控制結(jié)構(gòu)的強(qiáng)大的編程語言。為了展示語言可以有多么不同,我們會引入Logo作為強(qiáng)大并且具有表現(xiàn)力的編程語言的例子,它包含非常少的高級特性。

這一章中,我們會學(xué)習(xí)解釋器的設(shè)計(jì),以及在執(zhí)行程序時,它們所創(chuàng)建的計(jì)算過程。為通用語言設(shè)計(jì)解釋器的想法可能令人畏懼。畢竟,解釋器是執(zhí)行任何可能計(jì)算的程序,取決于它們的輸入。但是,典型的解釋器擁有簡潔的通用結(jié)構(gòu):兩個可變的遞歸函數(shù),第一個求解環(huán)境中的表達(dá)式,第二個在參數(shù)上調(diào)用函數(shù)。

這些函數(shù)都是遞歸的,因?yàn)樗鼈兓ハ喽x:調(diào)用函數(shù)需要求出函數(shù)體的表達(dá)式,而求出表達(dá)式可能涉及到調(diào)用一個或多個函數(shù)。這一章接下來的兩節(jié)專注于遞歸函數(shù)和數(shù)據(jù)結(jié)構(gòu),它們是理解解釋器設(shè)計(jì)的基礎(chǔ)。這一章的結(jié)尾專注于兩個新的編程語言,以及為其實(shí)現(xiàn)解釋器的任務(wù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容