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

1.1.3 運(yùn)算符組合式的求值

本章的一個(gè)目標(biāo)就是把與過(guò)程性思維有關(guān)的問(wèn)題區(qū)分出來(lái)。作為這方面的第一個(gè)情況,現(xiàn)在我們考慮運(yùn)算符組合式的求值。解釋器按下面的過(guò)程處理。

求值一個(gè)運(yùn)算符組合式時(shí),按下面的方式工作:

1.求值該組合式的各個(gè)子表達(dá)式。

2.把運(yùn)算符指代的那個(gè)函數(shù)應(yīng)用于有關(guān)的實(shí)參,也就是各個(gè)運(yùn)算對(duì)象的值。

即使是這樣一條簡(jiǎn)單規(guī)則,也顯示出一些在計(jì)算過(guò)程中具有普遍意義的重要問(wèn)題。首先,上面的第一步說(shuō)明,為了實(shí)現(xiàn)對(duì)一個(gè)組合式的求值過(guò)程,我們必須首先對(duì)該組合式的每個(gè)運(yùn)算對(duì)象執(zhí)行這種求值過(guò)程。因此,從性質(zhì)上說(shuō),這種求值過(guò)程是遞歸的,也就是說(shuō),在自己工作的步驟中,又包含了對(duì)這個(gè)規(guī)則本身的使用。

請(qǐng)?zhí)貏e注意,采用遞歸的思想可以多么簡(jiǎn)潔地描述深度嵌套的組合式的情況。如果不用遞歸,我們就需要把這種情況看成很復(fù)雜的計(jì)算過(guò)程。例如,求值:

需要把求值規(guī)則應(yīng)用于4個(gè)不同的組合式。我們可以把這個(gè)組合式表示為樹(shù)的形式,得到這個(gè)求值過(guò)程的圖示,如圖1.1所示。在這里,每個(gè)組合式用一個(gè)帶分支的結(jié)點(diǎn)表示,由它發(fā)出的分支對(duì)應(yīng)于組合式的運(yùn)算符和運(yùn)算對(duì)象。終端結(jié)點(diǎn)(那些不再發(fā)出分支的結(jié)點(diǎn))表示運(yùn)算符或者數(shù)。用樹(shù)的觀點(diǎn)看求值過(guò)程,我們可以設(shè)想那些運(yùn)算對(duì)象的值向上穿行,從終端結(jié)點(diǎn)開(kāi)始,在越來(lái)越高的層次組合起來(lái)。一般而言,我們會(huì)看到,遞歸是處理層次性結(jié)構(gòu)(類似樹(shù)這樣的對(duì)象)的特別強(qiáng)有力的技術(shù)。事實(shí)上,“值向上穿行”形式的求值規(guī)則是一類更具普遍意義的計(jì)算過(guò)程的一個(gè)例子,這種計(jì)算過(guò)程稱為樹(shù)形積累

圖1.1 樹(shù)表示,其中顯示了各個(gè)子表達(dá)式的值

進(jìn)一步觀察告訴我們,反復(fù)應(yīng)用第一個(gè)步驟,總會(huì)把我們帶到求值中的一點(diǎn),在這里遇到的不是組合式而是基本表達(dá)式,例如數(shù)或名字。我們按如下規(guī)定處理這些基礎(chǔ)情況:

●數(shù)的值就是它們所表示的數(shù)值。

●名字的值就是在環(huán)境中關(guān)聯(lián)于該名字的那個(gè)對(duì)象。

請(qǐng)注意這里的關(guān)鍵點(diǎn):環(huán)境扮演的角色就是確定表達(dá)式中各個(gè)名字的意義。在如JavaScript這樣的交互式語(yǔ)言里,如果沒(méi)有環(huán)境提供信息,說(shuō)(例如)表達(dá)式x+1的值也毫無(wú)意義,因?yàn)樾枰h(huán)境為符號(hào)x提供意義。正如我們將在第3章里看到的,一般的環(huán)境概念為求值的進(jìn)行提供上下文,對(duì)我們理解程序的執(zhí)行起著非常重要的作用。

請(qǐng)注意,上面給出的求值規(guī)則里沒(méi)有處理聲明。舉個(gè)例子,對(duì)const x=3;求值,并不是把=運(yùn)算符應(yīng)用于它的兩個(gè)實(shí)參,其中一個(gè)是名字x的值,另一個(gè)是3。聲明的作用就是為x關(guān)聯(lián)一個(gè)值(也就是說(shuō),const x=3;不是組合式)。

我們把const中的字母寫(xiě)成黑體,就是為表明它是JavaScript語(yǔ)言里的一個(gè)關(guān)鍵字。每個(gè)關(guān)鍵字都有特殊的意義,它們不能當(dāng)名字使用。關(guān)鍵字或關(guān)鍵字組合要求JavaScript解釋器以某種特殊方式處理相應(yīng)的語(yǔ)句。不同語(yǔ)句形式各有自己的求值規(guī)則。各種類別的語(yǔ)句和表達(dá)式(每類各有相關(guān)的求值規(guī)則)組成了程序設(shè)計(jì)語(yǔ)言的語(yǔ)法。

主站蜘蛛池模板: 龙川县| 贺州市| 宁明县| 永登县| 平定县| 平阳县| 周宁县| 兴义市| 喜德县| 沅陵县| 张家港市| 兰考县| 株洲县| 三台县| 安顺市| 洛南县| 房山区| 敖汉旗| 定远县| 济南市| 正蓝旗| 财经| 九台市| 宜黄县| 和林格尔县| 肃南| 宜君县| 乐昌市| 鄂尔多斯市| 库伦旗| 灵川县| 汤阴县| 故城县| 渝北区| 浮山县| 沾化县| 瑞安市| 柯坪县| 平度市| 隆子县| 泉州市|