版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第8章 構(gòu)造表達(dá)式完成了數(shù)據(jù)描述的任務(wù)之后,一個(gè)程序就進(jìn)入了數(shù)據(jù)處理的階段。也就是一系列的以數(shù)據(jù)為對(duì)象的操作語句,訪問經(jīng)過聲明的數(shù)據(jù)對(duì)象,施加計(jì)算處理之后,獲得新的數(shù)據(jù)結(jié)果。FORTRAN語言里面訪問數(shù)據(jù)對(duì)象然后返回值的一個(gè)基本指令形式是表達(dá)式,而通過表達(dá)式所得到的計(jì)算結(jié)果被用來賦值給某個(gè)變量,完成這個(gè)操作的是賦值語句。本章與下一章我們將討論表達(dá)式與賦值語句這兩個(gè)相續(xù)的改變機(jī)器的數(shù)據(jù)狀態(tài)的基本操作。一個(gè)科學(xué)計(jì)算程序的基本任務(wù)就是進(jìn)行計(jì)算,而計(jì)算的最基本的單位就是表達(dá)式。FORTRAN作為一門最早的高級(jí)語言,其初衷就是公式翻譯(FORMULA TRANSLATION),即希望運(yùn)用這個(gè)
2、語言,能夠把數(shù)學(xué)公式最好是原封不動(dòng)地搬到FORTRAN語言的環(huán)境里,而計(jì)算機(jī)能夠忠實(shí)地理解公式的含義,并進(jìn)行公式所要求的運(yùn)算。當(dāng)然,要求把能夠把數(shù)學(xué)公式原封不動(dòng)地搬到FORTRAN語言的環(huán)境里,就能夠被FORTRAN理解是不可能的,因?yàn)槭紫仁枪降妮斎胧艿芥I盤的限制,然后作為一種程序語言,我們?cè)诘?章已經(jīng)討論過,它所使用的字符集必定是有限的,而數(shù)學(xué)符號(hào)的集合則基本上是開放性的。而從計(jì)算的實(shí)質(zhì)上來考慮,我們知道計(jì)算機(jī)在物理層面所能夠做到的計(jì)算其實(shí)是非常簡單的加減法而已,因此我們希望運(yùn)用計(jì)算機(jī)來完成任意的計(jì)算任務(wù),所面臨的挑戰(zhàn),正是如何把我們的實(shí)際計(jì)算任務(wù)分解為等價(jià)的簡單計(jì)算過程的組合,F(xiàn)ORTR
3、AN作為一種語言,顯然只能在很初步的層次上完成這個(gè)任務(wù),即直接在語言里使用數(shù)學(xué)基本運(yùn)算,例如:加法,減法,乘法,冪運(yùn)算等,然后在此基礎(chǔ)上,再定義一些基本的數(shù)學(xué)函數(shù)作為語言的固有函數(shù),可以供人直接引用,對(duì)它的解釋則完全交給FORTRAN編譯器。FORTRAN所能夠做到的基本上也就到此為止了。更進(jìn)一步的計(jì)算的分解任務(wù),則必須由程序來完成。因此FORTRAN能夠做到的就是盡量以符合數(shù)學(xué)的書寫習(xí)慣的方式來規(guī)范表達(dá)式的格式。一般說來,我們把表達(dá)式理解為語句(甚至是程序)的語法結(jié)構(gòu)的單位。在其他的語言里,表達(dá)式同樣具有非常關(guān)鍵的語法地位,例如在C語言中,表達(dá)式組成了允許每一語句改變機(jī)器狀態(tài)的基本操作。在L
4、ISP語言這樣的高級(jí)應(yīng)用語言中,表達(dá)式構(gòu)成了驅(qū)動(dòng)程序執(zhí)行的基本順序控制。而在FORTRAN這樣的以科學(xué)計(jì)算為主要目的的語言當(dāng)中,表達(dá)式更是構(gòu)成了完成計(jì)算任務(wù)的基本成分。本章的討論就是圍繞著表達(dá)式的構(gòu)造如何貼切地合乎我們對(duì)于計(jì)算任務(wù)的要求。分為三個(gè)部分: 有效合法的表達(dá)式的格式。也就是構(gòu)造表達(dá)式的語法。按照我們?cè)谇懊娼?jīng)常根據(jù)語法規(guī)則來構(gòu)造語言所獲得的經(jīng)驗(yàn),合乎格式的語句不一定是有實(shí)際意義的語句,因此我們接著就需要討論對(duì)表達(dá)式的理解問題,即: 對(duì)表達(dá)式的解釋。可以理解為表達(dá)式的語義,也就是一種規(guī)范,按照這種規(guī)范,計(jì)算機(jī)讀入合法的表達(dá)式之后,能夠無歧義地轉(zhuǎn)化為一系列指令,從而采取相應(yīng)的動(dòng)作。計(jì)算機(jī)對(duì)
5、表達(dá)式的含義的理解建立在表達(dá)式的構(gòu)造語法的規(guī)范性上,一旦完成這個(gè)步驟,接著就是完成表達(dá)式的最終任務(wù): 表達(dá)式的計(jì)算過程。計(jì)算機(jī)對(duì)于表達(dá)式的實(shí)際計(jì)算過程未必與人的計(jì)算過程一致,對(duì)于計(jì)算機(jī)來說,最為重要的是根據(jù)機(jī)器計(jì)算的特點(diǎn),對(duì)計(jì)算過程進(jìn)行優(yōu)化,相應(yīng)的作為程序作者,我們需要了解機(jī)器的優(yōu)化原則,以便在程序?qū)懽髋c算法設(shè)計(jì)上配合機(jī)器的計(jì)算優(yōu)化能力。FORTRAN表達(dá)式的構(gòu)造,需要解決兩大問題: 構(gòu)造算元與算符的規(guī)則; 運(yùn)算優(yōu)先級(jí)的規(guī)則。在構(gòu)造合法的FORTRAN表達(dá)式的過程中,最主要的問題就是如何在FORTRAN有限的構(gòu)造表達(dá)式的規(guī)則下,能夠構(gòu)造具有開放性的數(shù)學(xué)公式。由于一個(gè)表達(dá)式的基本成分就是算元,算
6、符和括號(hào),因此上面的問題可以分為兩個(gè)部分:·在固有算元類型的基礎(chǔ)上,能夠構(gòu)造派生類型的算元;·在固有算符的基礎(chǔ)上,能夠擴(kuò)展固有算符的適用范圍,能夠構(gòu)造派生類型的算符。因此所謂構(gòu)造表達(dá)式的規(guī)則,除了規(guī)定固有算元與固有算符之外,還必須給出對(duì)固有算元與固有算符的擴(kuò)展與派生定義的規(guī)則。接下來需要考慮的問題,就是如何表達(dá)運(yùn)算優(yōu)先級(jí),也就是括號(hào)所具有的功能。在數(shù)學(xué)運(yùn)算的過程當(dāng)中,運(yùn)算優(yōu)先級(jí)是一個(gè)很自然的問題,在數(shù)學(xué)公式的寫作中,我們使用了很多隱含的規(guī)則,基本能夠保證數(shù)學(xué)公式的讀者不會(huì)產(chǎn)生歧義,把數(shù)學(xué)公式轉(zhuǎn)換到FORTRAN語言當(dāng)中,就不能夠再依靠那些隱含的規(guī)則,而是需要把那些規(guī)則明確的
7、形式化出來,有時(shí)候還得制定適應(yīng)于機(jī)器語言的獨(dú)特規(guī)則。盡管我們可以使用盡可能多的括號(hào)來做到明確的優(yōu)先級(jí)描述,但是從方便寫作的角度來看,在不導(dǎo)致歧義的前提下,可以通過形式規(guī)則來省略很多括號(hào)。8.1 表達(dá)式的構(gòu)造本節(jié)可以說是書寫表達(dá)式的語法。從語言的角度來看,我們前面章節(jié)所討論的數(shù)據(jù)對(duì)象,可以說是語言的詞匯,而且是語法意義上比較簡單詞匯,即使很多數(shù)據(jù)對(duì)象可以具有非常復(fù)雜的數(shù)據(jù)結(jié)構(gòu),但在語法意義上,則仍然可以看成是單詞。但表達(dá)式就不同了,它所隱含的指令性質(zhì)使得它可以看成是復(fù)合性質(zhì)的詞匯。實(shí)際上表達(dá)式是訪問程序中的數(shù)據(jù)對(duì)象并返回值的函數(shù)。這就要求它具有比數(shù)據(jù)對(duì)象更為復(fù)雜的語法結(jié)構(gòu)。表達(dá)式包含
8、三個(gè)基本成分: 算元; 算符; 括號(hào)。其中算元具有最基本的實(shí)質(zhì)含義,因此最簡單的表達(dá)式就是一個(gè)常量,或一個(gè)變量。【例8-1】 下面的例子都可以看成是最簡單的表達(dá)式:2.7183 !一個(gè)實(shí)型常數(shù)A
9、; !一個(gè)標(biāo)量變量X !一個(gè)數(shù)組變量.TURE. !一個(gè)邏輯型常量X(I)
10、; !作為數(shù)組X的元素的變量X(10:100:5) !作為一個(gè)數(shù)組片斷的變量A%B !作為結(jié)構(gòu)A的成員的變量X(I)(K:K+100)
11、; !作為數(shù)組元素X(I)的子串的變量8.1.1 算元遵循變量的數(shù)學(xué)精神,我們可以把表達(dá)式看成是一個(gè)遞歸結(jié)構(gòu),即表達(dá)式里的變量總是可以代表任意的由變量構(gòu)成的結(jié)構(gòu),或者說表達(dá)式,因此可以如下規(guī)定算元的構(gòu)成。一個(gè)算元可以是如下形式的表達(dá)式: 一個(gè)常量或常量的子對(duì)象; 一個(gè)變量; 一個(gè)數(shù)組構(gòu)造器; 一個(gè)結(jié)構(gòu)構(gòu)造器; 一個(gè)函數(shù)引用; 另一個(gè)括號(hào)里的表達(dá)式。注意另一個(gè)表達(dá)式!,如果使用同一個(gè)表達(dá)式,必然導(dǎo)致死循環(huán)?!纠?-2】 下面是算元的例子:X &
12、#160; &
13、#160; !Y(3)Z(10:100)(X+SIN(Y)(/5.52,4031/)EULER(5,9)RT8.1.2 一元算符與二元算符根據(jù)算符所作用的算元數(shù)目,算符分為一元算符與二元算符。下面的表8-1給出了FORTRAN的固有算符,除此之外,用戶可以運(yùn)用函數(shù)子程序來給出自定義算符,然后使用一個(gè)名稱來標(biāo)志該自定義算符,在FORTRAN語言里,則還需要在名稱的兩邊分別加上一個(gè)句點(diǎn),以便FORTRAN辨識(shí)為自定義算符。無論是固有算符還是自定義算符,總是分為一元算符與二元算符。一元算符作用
14、于一個(gè)算元,形式為: operator x即算符寫在算元之前?!纠?-3】 + A - G .NOT. B上面的一元算符里面,+和-都可以成為二元算符,而.NOT.則是唯一的只能作一元算符的固有算符。加號(hào)+運(yùn)算實(shí)際上并不影響算元的值。二元算符作用于2個(gè)算元,形式為: x operator y即算符寫在2個(gè)算元之間?!纠?-4】 A+B D*3
15、160; X .AND. Y A .GT. B C .NE. D PROGRAMER / CALCULATE A = B C-D8.1.3 固有算符與自定義算符算符分為兩類: 固有算符。所謂固有算符就是直接使用相應(yīng)符號(hào),能夠被FORTRAN編譯器所辨識(shí)的算符。下面的表8-1給出了FORTRAN的固有算符以及相應(yīng)的算元類型。表8-1 FORTRAN的固有算符以及相應(yīng)的算元類型算符類別
16、固有算符算元類型算術(shù)運(yùn)算+,-(一元算符)*,*,/,+,-(二元算符)任意數(shù)值類型與任意種別參數(shù)的數(shù)值的組合字符運(yùn)算/具有相同種別參數(shù)的任意長度的字符串關(guān)系運(yùn)算.EQ.,.NE.,=,/=兩個(gè)算元或者同時(shí)是任意數(shù)值類型與任意種別參數(shù)的數(shù)值,或者同時(shí)是具有相同種別參數(shù)的任意長度的字符串關(guān)系運(yùn)算.GT.,.GE.,.LT.,.LE.,>,>=,<,<=兩個(gè)算元或者同時(shí)是除了復(fù)型之外的任意數(shù)值類型與任意種別參數(shù)的數(shù)值,或者同時(shí)是具有相同種別參數(shù)的任意長度的字符串邏輯運(yùn)算.NOT.(一元算符).AND.,.OR.,.EQV.,NEQV. (二元算符)同時(shí)是任意種別參數(shù)的邏輯型
17、數(shù)據(jù)的組合 關(guān)系算符=,/=,>,>=,<,<=是為了向數(shù)學(xué)公式的寫法靠近,而在FORTRAN里面最新引入的算符寫法,分別等價(jià)于.EQ.,.NE.,.GT.,.GE.,.LT.,.LE.。 自定義算符。顯然上面那些固有算符不夠用,所以為了獲得算符表示的開放性,F(xiàn)ORTRAN約定了通過函數(shù)子程序定義自定義算符的規(guī)則。首先自定義算符必須擁有一個(gè)名稱,而這個(gè)名稱的寫法必須滿足一定的形式規(guī)則,以便FORTRAN編譯器的辨識(shí)。自定義算符的形式為: .XXX .即在兩個(gè)句點(diǎn)之間有n個(gè)字母,n不大于31
18、。中間的字母串最好是一個(gè)表達(dá)該運(yùn)算含義的英文單詞。這個(gè)單詞不能與固有運(yùn)算符或者邏輯常量里面已經(jīng)使用了的單詞重復(fù)。自定義算符可以是基于已經(jīng)定義的算符和固有算符,完全重新定義的算符,因此需要給出一個(gè)新的名稱,也可以是對(duì)固有算符的作用算元的類型的擴(kuò)展,這時(shí)仍然可以使用固有算符的符號(hào),但是擴(kuò)展定義需要預(yù)先給出。一元自定義算符具有最高的運(yùn)算優(yōu)先級(jí),而二元自定義算符具有最低的運(yùn)算優(yōu)先級(jí)。8.2.4 構(gòu)造表達(dá)式的規(guī)則所謂構(gòu)造表達(dá)式的規(guī)則,就是一系列的語句規(guī)則,按照這個(gè)規(guī)則把算元和算符組合起來得到的就是合法的表達(dá)式。當(dāng)然這里包含了一定的任意性,即只要按照這個(gè)規(guī)則構(gòu)造出來的表達(dá)式都是被FORTRAN
19、認(rèn)可的。語法規(guī)則除了給出算元與算符的順序之外,還能夠表達(dá)運(yùn)算順序,而這個(gè)運(yùn)算順序是以運(yùn)算優(yōu)先級(jí)形式給出的,當(dāng)然FORTRAN表達(dá)式的運(yùn)算優(yōu)先級(jí)必須和我們的數(shù)學(xué)公式里的運(yùn)算優(yōu)先級(jí)一致。直觀來看,表達(dá)式就是變量的運(yùn)算結(jié)構(gòu),而變量本身具有遞歸的含義,因此表達(dá)式的定義必然是具有遞歸的結(jié)構(gòu)。也就是首先我們定義最底層的基元,即最簡單的表達(dá)式,然后對(duì)基元的運(yùn)算構(gòu)成更加復(fù)雜的表達(dá)式,而遞歸的體現(xiàn)就是在基元里面包括括號(hào)里面的表達(dá)式。1. 基元基元的形式定義(R701)為: constant constant-subobject &
20、#160; variable array-constructor structure-constructor function-reference (expression)以上任何一種對(duì)象都可以成為基元。所謂常量子對(duì)象(constant-subobject),就是一個(gè)父結(jié)構(gòu)為常量的子對(duì)象。作為基元的變量,不能是啞尺度數(shù)組,或者一個(gè)啞尺度數(shù)組的片斷,除非數(shù)組的最后一個(gè)下標(biāo)已經(jīng)明確給出為一個(gè)標(biāo)量下標(biāo),或上界確定的下標(biāo)三元組,或下標(biāo)向量。
21、0; 【例8-5】 基元的例子如下:3.1416實(shí)型常量PI命名常量LENGTH命名常量WHOLE(I:I)常量子對(duì)象X變量X(K)數(shù)組元素X(:,1:K)在最后一維具有上界的啞尺度數(shù)組STRING(I:J)子串(/I,5,100/)數(shù)組構(gòu)造器BESSEL1(A,B)結(jié)構(gòu)構(gòu)造器F(X)函數(shù)引用(WHOLE(I:I)/BUT)括號(hào)里的表達(dá)式作為一個(gè)命名常量,PI明顯地表示圓周率,使用這類含義明確的英文單詞來表示常量是一個(gè)很好的習(xí)慣。當(dāng)LENGTH具有PARAMETER屬性,或出現(xiàn)在PARAMETER語句當(dāng)中時(shí),同樣是一個(gè)命名常量。WHOLE(I:I)實(shí)際上是一個(gè)常量子對(duì)象
22、,盡管其中I可能是一個(gè)變量,但它的父結(jié)構(gòu)是一個(gè)常量。BESSEL1(A,B), F(X)都屬于自定義類型對(duì)象,它們?cè)诔绦蚶锍霈F(xiàn)時(shí),都需要預(yù)先加以定義。2. 自定義一元表達(dá)式一個(gè)已經(jīng)自定義的一元算符后接一個(gè)算元構(gòu)成一個(gè)自定義一元表達(dá)式,句法形式(R703)為: defined-operetorprimary其中自定義算符(defined-operetor)的句法形式(R704)為: .letterletter .注意自定義算符是可選的,即單獨(dú)的基元也可以構(gòu)成一元表達(dá)式。構(gòu)成自定義算符的字符數(shù)目不能夠超過31。自定義算符不能與
23、固有算符以及邏輯字面常量雷同。【例8-6】.ABEL.G自定義一元表達(dá)式,.ABEL.為自定義算符G單獨(dú)的基元也可以構(gòu)成一元表達(dá)式3. 冪運(yùn)算表達(dá)式冪運(yùn)算表達(dá)式的句法形式(R705)為: defined-unary-expression*exponentiation-expression以上形式表明了冪運(yùn)算表達(dá)式(exponentiation-expression)是右邊遞歸的,即冪運(yùn)算算符右邊的冪運(yùn)算表達(dá)式正是上面所定義的表達(dá)式本身,這意味著會(huì)出現(xiàn)多個(gè)冪運(yùn)算連在一起的情形,這時(shí)的優(yōu)先級(jí)是從右到左,即X*Y*Z被解釋為X*(Y*Z)。注意其中的冪運(yùn)算表達(dá)式與
24、冪運(yùn)算算符都是可選的,即單獨(dú)的自定義一元表達(dá)式從語法角度而言,也是冪運(yùn)算表達(dá)式?!纠?-7】X*Y冪運(yùn)算表達(dá)式X*Y*Z表示從右到左優(yōu)先級(jí)的冪運(yùn)算表達(dá)式.ABEL.G自定義一元表達(dá)式也是冪運(yùn)算表達(dá)式G單獨(dú)的基元也可以構(gòu)成冪運(yùn)算表達(dá)式4. 乘法表達(dá)式乘法表達(dá)式的算元為*和/,句法形式(R706)為: multiplication-expression*exponentiation-expression multiplication-expression / exponentiation-expression以上形式表明了乘法
25、表達(dá)式(multiplication-expression)是左邊遞歸的,即乘法算符左邊的乘法表達(dá)式正是上面所定義的表達(dá)式本身,這意味著會(huì)出現(xiàn)多個(gè)乘法運(yùn)算連在一起的情形,這時(shí)的優(yōu)先級(jí)順序是從左到右,即X*Y*Z被解釋為(X*Y)*Z。在以后的二元運(yùn)算里,除了關(guān)系運(yùn)算,同級(jí)優(yōu)先級(jí)順序都是從左到右。注意使用算符*的乘法運(yùn)算表達(dá)式與乘法運(yùn)算算符都是可選的,即單獨(dú)的冪運(yùn)算表達(dá)式從語法角度而言,也是冪運(yùn)算表達(dá)式?!纠?-8】X*Y乘法運(yùn)算表達(dá)式X*Y*Z表示從左到右優(yōu)先級(jí)順序的乘法運(yùn)算表達(dá)式X / Y乘法運(yùn)算表達(dá)式X / Y / Z表示從左到右優(yōu)先級(jí)順序的乘法運(yùn)算表達(dá)式X*Y冪運(yùn)算表達(dá)式也是乘法運(yùn)算表達(dá)
26、式.ABEL.G自定義一元表達(dá)式也是乘法運(yùn)算表達(dá)式G單獨(dú)的基元也可以構(gòu)成乘法運(yùn)算表達(dá)式5. 加法表達(dá)式加法表達(dá)式的算元為+和-,句法形式(R707)為: summation-expression + multiplication -expression summation-expression - multiplication expression + multiplication -expression- multiplication expression多個(gè)加法運(yùn)算的優(yōu)先級(jí)順序是從左
27、到右,例如X+Y+Z被解釋為(X+Y)+Z。注意使用算符+的加法運(yùn)算表達(dá)式與加法運(yùn)算算符都是可選的,即單獨(dú)的乘法運(yùn)算表達(dá)式從語法角度而言,也是加法運(yùn)算表達(dá)式?!纠?-9】X+Y加法表達(dá)式X-Y+Z表示從左到右優(yōu)先級(jí)順序的加法表達(dá)式-X-Y-Z表示從左到右優(yōu)先級(jí)順序的加法表達(dá)式-X使用一元算符-的加法表達(dá)式+X使用一元算符+的加法表達(dá)式X*Y加法表達(dá)式X / Y / Z加法表達(dá)式X*Y冪運(yùn)算表達(dá)式也是加法表達(dá)式.ABEL.G自定義一元表達(dá)式也是加法表達(dá)式G單獨(dú)的基元也可以構(gòu)成加法表達(dá)式6. 串聯(lián)表達(dá)式串聯(lián)表達(dá)式的算元為/,句法形式(R711)為: concat
28、enation-expression / summation-expression 【例8-10】X/Y串聯(lián)表達(dá)式X/Y/Z表示從左到右優(yōu)先級(jí)順序的串聯(lián)表達(dá)式X+Y加法表達(dá)式也是串聯(lián)表達(dá)式-X-Y-Z串聯(lián)表達(dá)式-X串聯(lián)表達(dá)式X*Y串聯(lián)表達(dá)式X / Y / Z串聯(lián)表達(dá)式X*Y冪運(yùn)算表達(dá)式也是串聯(lián)表達(dá)式.ABEL.G自定義一元表達(dá)式也是串聯(lián)表達(dá)式G單獨(dú)的基元也可以構(gòu)成串聯(lián)表達(dá)式7. 比較表達(dá)式比較表達(dá)式的算元為關(guān)系算符,句法形式(R713)為: concatenation-expression relation-operator concatenation-ex
29、pression 關(guān)系算符=,/=,>,>=,<,<=在任何情況下總是分別等價(jià)于.EQ.,.NE.,.GT.,.GE.,.LT.,.LE.。注意關(guān)系表達(dá)式的定義不具有遞歸性,即關(guān)系表達(dá)式本身不出現(xiàn)在上面的形式定義當(dāng)中,所以不會(huì)出現(xiàn)多個(gè)關(guān)系算符連在一起的情形?!纠?-11】X .NE. Y關(guān)系表達(dá)式X <=Y關(guān)系表達(dá)式X/Y關(guān)系表達(dá)式X+Y加法表達(dá)式也是關(guān)系表達(dá)式-X關(guān)系表達(dá)式X / Y / Z關(guān)系表達(dá)式X*Y冪運(yùn)算表達(dá)式也是關(guān)系表達(dá)式.ABEL.G自定義一元表達(dá)式也是關(guān)系表達(dá)式G單獨(dú)的基元也可以構(gòu)成關(guān)系表達(dá)式8. 非運(yùn)算表達(dá)式非運(yùn)算表達(dá)式的算元為.NOT.,是一元
30、算符,句法形式(R715)為: .NOT. comparision-expression 注意非運(yùn)算表達(dá)式的定義不具有遞歸性,即非運(yùn)算表達(dá)式本身不出現(xiàn)在上面的形式定義當(dāng)中,所以不會(huì)出現(xiàn)多個(gè)算符.NOT.連在一起的情形?!纠?-12】.NOT. X非運(yùn)算表達(dá)式X .NE. Y關(guān)系表達(dá)式也是非運(yùn)算表達(dá)式X <=Y非運(yùn)算表達(dá)式X/Y非運(yùn)算表達(dá)式X+Y加法表達(dá)式也是非運(yùn)算表達(dá)式X / Y / Z非運(yùn)算表達(dá)式X*Y冪運(yùn)算表達(dá)式也是非運(yùn)算表達(dá)式.ABEL.G自定義一元表達(dá)式也是非運(yùn)算表達(dá)式G單獨(dú)的基元也可以構(gòu)成非運(yùn)算表達(dá)式9. 與運(yùn)算表達(dá)式與運(yùn)算表達(dá)式的算元為.A
31、ND.,是二元算符,句法形式(R716)為: conjunct-expression .NOT. not-expression 注意與運(yùn)算表達(dá)式的定義具有左邊遞歸性,即與運(yùn)算表達(dá)式本身出現(xiàn)在上面的形式定義當(dāng)中,所以會(huì)出現(xiàn)多個(gè)算符.AND.連在一起的情形,這時(shí)的優(yōu)先順序是從左到右。即X .AND. Y.AND. Z的優(yōu)先順序是(X .AND. Y).AND. Z。【例8-13】X .AND. Y與運(yùn)算表達(dá)式X .AND. Y.AND. Z優(yōu)先順序是從左到右的與運(yùn)算表達(dá)式.NOT. X非運(yùn)算表達(dá)式也是與運(yùn)算表達(dá)式X .NE. Y關(guān)系表達(dá)式也是與運(yùn)算表達(dá)式X &l
32、t;=Y與運(yùn)算表達(dá)式X/Y與運(yùn)算表達(dá)式X+Y加法表達(dá)式也是與運(yùn)算表達(dá)式X / Y / Z與運(yùn)算表達(dá)式X*Y冪運(yùn)算表達(dá)式也是與運(yùn)算表達(dá)式.ABEL.G自定義一元表達(dá)式也是與運(yùn)算表達(dá)式G單獨(dú)的基元也可以構(gòu)成與運(yùn)算表達(dá)式10. 或運(yùn)算表達(dá)式或運(yùn)算表達(dá)式的算元為.OR.,是二元算符,句法形式(R717)為: disjunct-expression .OR. conjunct -expression 注意或運(yùn)算表達(dá)式的定義具有左邊遞歸性,即或運(yùn)算表達(dá)式本身出現(xiàn)在上面的式定義當(dāng)中,所以會(huì)出現(xiàn)多個(gè)算符.OR.連在一起的情形,這時(shí)的優(yōu)先順序是從左到右。即X.O
33、R. Y.OR. Z的優(yōu)先順序是(X.OR. Y).OR. Z?!纠?-14】X.OR. Y或運(yùn)算表達(dá)式X.OR. Y.OR. Z優(yōu)先順序是從左到右的或運(yùn)算表達(dá)式X .AND. Y與運(yùn)算表達(dá)式也是或運(yùn)算表達(dá)式.NOT. X非運(yùn)算表達(dá)式也是或運(yùn)算表達(dá)式X .NE. Y關(guān)系表達(dá)式也是或運(yùn)算表達(dá)式X <=Y或運(yùn)算表達(dá)式X/Y或運(yùn)算表達(dá)式X+Y加法表達(dá)式也是或運(yùn)算表達(dá)式X / Y / Z或運(yùn)算表達(dá)式X*Y冪運(yùn)算表達(dá)式也是或運(yùn)算表達(dá)式.ABEL.G自定義一元表達(dá)式也是或運(yùn)算表達(dá)式G單獨(dú)的基元也可以構(gòu)成或運(yùn)算表達(dá)式11. 等價(jià)運(yùn)算表達(dá)式等價(jià)運(yùn)算表達(dá)式的算元為.EQV.或者是.NEQV.,是二元算符,
34、句法形式(R718)為: equivalence-expression .EQV. disjunct -expression equivalence-expression .NEQV. disjunct expression注意等價(jià)運(yùn)算表達(dá)式的定義具有左邊遞歸性,即等價(jià)運(yùn)算表達(dá)式本身出現(xiàn)在上面的形式定義當(dāng)中,所以會(huì)出現(xiàn)多個(gè)算符.EQV. 或與.NEQV.連在一起的情形,這時(shí)的優(yōu)先順序是從左到右。即X.NEQV. Y.EQV. Z的優(yōu)先順序是(X.NEQV. Y).EQV. Z?!纠?-15】Y.EQV. Z等價(jià)運(yùn)算表達(dá)式X.NEQV. Y等價(jià)運(yùn)
35、算表達(dá)式X.NEQV. Y.EQV. Z優(yōu)先順序是從左到右的等價(jià)運(yùn)算表達(dá)式X.OR. Y或運(yùn)算表達(dá)式也是等價(jià)運(yùn)算表達(dá)式X .AND. Y與運(yùn)算表達(dá)式也是等價(jià)運(yùn)算表達(dá)式.NOT. X非運(yùn)算表達(dá)式也是等價(jià)運(yùn)算表達(dá)式X .NE. Y關(guān)系表達(dá)式也是等價(jià)運(yùn)算表達(dá)式X <=Y等價(jià)運(yùn)算表達(dá)式X/Y等價(jià)運(yùn)算表達(dá)式X+Y加法表達(dá)式也是等價(jià)運(yùn)算表達(dá)式X / Y / Z等價(jià)運(yùn)算表達(dá)式X*Y冪運(yùn)算表達(dá)式也是等價(jià)運(yùn)算表達(dá)式.ABEL.G自定義一元表達(dá)式也是等價(jià)運(yùn)算表達(dá)式G單獨(dú)的基元也可以構(gòu)成等價(jià)運(yùn)算表達(dá)式12. 表達(dá)式最一般的表達(dá)式的句法形式(R723)為: expressio
36、n defined-operator equivalence-expression 注意表達(dá)式(expression)的定義具有左邊遞歸性,即表達(dá)式本身出現(xiàn)在上面的形式定義當(dāng)中,所以會(huì)出現(xiàn)多個(gè)相同優(yōu)先級(jí)的算符連在一起的情形,這時(shí)的優(yōu)先順序是從左到右?!纠?-16】X .CROSS. Y表達(dá)式X .CROSS. Y .CROSS. Z優(yōu)先順序是從左到右的表達(dá)式Y(jié).EQV. Z等價(jià)運(yùn)算表達(dá)式也是表達(dá)式X.NEQV. Y等價(jià)運(yùn)算表達(dá)式也是表達(dá)式X.NEQV. Y.EQV. Z等價(jià)運(yùn)算表達(dá)式也是表達(dá)式X.OR. Y或運(yùn)算表達(dá)式也是表達(dá)式X .AND. Y與運(yùn)算表達(dá)式也是表達(dá)式.NOT. X
37、非運(yùn)算表達(dá)式也是表達(dá)式X .NE. Y關(guān)系表達(dá)式也是表達(dá)式X <=Y表達(dá)式X/Y表達(dá)式X+Y加法表達(dá)式也是表達(dá)式X / Y / Z表達(dá)式X*Y冪運(yùn)算表達(dá)式也是表達(dá)式.ABEL.G自定義一元表達(dá)式也是表達(dá)式G單獨(dú)的基元也可以構(gòu)成表達(dá)式13. 表達(dá)式形式的層次上面我們已經(jīng)完備地給出了表達(dá)式的語法形式,可以明顯地看到從最簡單的表達(dá)式到更為復(fù)雜的表達(dá)式,具有一種層次結(jié)構(gòu),這種依據(jù)優(yōu)先級(jí)順序給出的層次結(jié)構(gòu)是我們構(gòu)造復(fù)雜表達(dá)式所必須遵循的規(guī)則,也是計(jì)算機(jī)理解表達(dá)式時(shí)所依據(jù)的規(guī)則。下面我們給出總結(jié)?!纠?-17】下面是一個(gè)表達(dá)式里的運(yùn)算優(yōu)先級(jí)降低的例子: X
38、0; !基元 .INVERSE. X
39、 !自定義一元運(yùn)算 X*Y !冪運(yùn)算表達(dá)式 X*Y
40、; !乘法運(yùn)算表達(dá)式 -X
41、0;!加法運(yùn)算表達(dá)式 X/Y !連接運(yùn)算表達(dá)式 X .EQ. Y
42、0; !比較運(yùn)算表達(dá)式 .NOT. X !非運(yùn)算表達(dá)式 X .AND. Y
43、; !并運(yùn)算表達(dá)式 X .OR. Y !或運(yùn)算表達(dá)式
44、60; X .EQV. Y !等價(jià)運(yùn)算表達(dá)式 X .CROSS. Y
45、60; !一般表達(dá)式下表8-2給出各種一般形式的表達(dá)式的運(yùn)算優(yōu)先級(jí):表8-2一般形式的表達(dá)式的運(yùn)算優(yōu)先級(jí)優(yōu)先級(jí)向下遞降的運(yùn)算項(xiàng)運(yùn)算的定義優(yōu)先級(jí)基元常量常量子對(duì)象變量數(shù)組構(gòu)造器函數(shù)引用(表達(dá)式)高 自定義一元運(yùn)算表達(dá)式自定義算符運(yùn)算元 冪運(yùn)算表達(dá)式自定義一元運(yùn)算表達(dá)式*冪運(yùn)算表達(dá)式 乘法運(yùn)算表達(dá)式乘法運(yùn)算表達(dá)式*冪運(yùn)算表達(dá)式乘法運(yùn)算表達(dá)式 /冪運(yùn)算表達(dá)式 加法運(yùn)算表達(dá)式加法運(yùn)算表達(dá)式+乘法運(yùn)算表達(dá)式加法運(yùn)算表達(dá)式 - 乘法運(yùn)算表達(dá)式+ 加法運(yùn)算表達(dá)式- 加法運(yùn)算表達(dá)式
46、60; 連接運(yùn)算表達(dá)式連接運(yùn)算表達(dá)式 /加法運(yùn)算表達(dá)式 比較運(yùn)算表達(dá)式比較運(yùn)算表達(dá)式關(guān)系算符 比較運(yùn)算表達(dá)式 非運(yùn)算表達(dá)式.NOT. 比較運(yùn)算表達(dá)式 并運(yùn)算表達(dá)式并運(yùn)算表達(dá)式 .AND. 非運(yùn)算表達(dá)式 或運(yùn)算表達(dá)式或運(yùn)算表達(dá)式 .OR. 并運(yùn)算表達(dá)式 等價(jià)運(yùn)算表達(dá)式等價(jià)運(yùn)算表達(dá)式 .EQV. 或運(yùn)算表達(dá)式等價(jià)運(yùn)算表達(dá)式 .NEQV. 或運(yùn)算表達(dá)式 一般表達(dá)式表達(dá)式自定義算符 等價(jià)運(yùn)算表達(dá)式低 8.2.5 算符的優(yōu)先級(jí)順序下表8-3給出各類算符在同樣的優(yōu)先級(jí)的情形下的運(yùn)算優(yōu)先級(jí)順序
47、:表8-3各類算符在同樣的優(yōu)先級(jí)的情形下的運(yùn)算優(yōu)先級(jí)順序算符類型算符同優(yōu)先級(jí)下的運(yùn)算順序優(yōu)先級(jí)自定義一元自定義算符無最高數(shù)值運(yùn)算*右到左 數(shù)值運(yùn)算*或 /左到右 數(shù)值運(yùn)算一元算符+或-無 數(shù)值運(yùn)算二元算符+或-左到右 字符運(yùn)算/左到右 關(guān)系運(yùn)算 .EQ.,.NE.,.LT.,.LE.,.GT.,.GE.,=,/=,<,<=,>,>=無 邏輯運(yùn)算.NOT.無 邏輯運(yùn)算.AND.左到右 邏輯運(yùn)算.OR.左到右 邏輯運(yùn)算.EQV.或.NEQV.左到右 自定
48、義二元自定義算符左到右最低
49、; 表8-3自定義一元算符在所有算符與所有同優(yōu)先級(jí)算符當(dāng)中,具有最高的優(yōu)先級(jí)。而自定義二元算符在所有算符與所有同優(yōu)先級(jí)算符當(dāng)中,具有最低的優(yōu)先級(jí)。表中的“無”表示該算符不會(huì)連續(xù)出現(xiàn),可以看到具有這個(gè)特點(diǎn)的是自定義一元算符,關(guān)系算符,和邏輯非算符,它們的優(yōu)先級(jí)順序只能使用括號(hào)來說明。8.2.6 固有運(yùn)算固有運(yùn)算的完整含義是,除了算符是屬于固有算符,因此可以直接使用相應(yīng)符號(hào)而不需要預(yù)先說明之外,算
50、符所作用的算元也必須屬于固有數(shù)據(jù)類型。不同的算符所能夠作用的算元類型是不同的。下表8-4給出了不同的算符所能夠作用的算元類型:表8-4 不同的算符所能夠作用的算元類型固有算符算元1的類型算元2的類型計(jì)算結(jié)果的類型一元算符+,- I,R,ZI,R,Z二元算符+,-,*,/,*IRZI,R,ZI,R,ZI,R,ZI,R,ZR,R,ZZ,Z,Z串聯(lián)算符/CCC.EQ.,.NE.,=,/=IRZCI,R,ZI,R,ZI,R,ZCL,L,LL,L,LL,L,LL.LT.,.LE.,.GT.,.GE.,=,/=,<,<=,>,>=IRCI,RI,RCL,LL,
51、LL.NOT. LL.AND.,.OR.,.EQV.,NEQV.LLL 表中I表示整型,R表示實(shí)型,Z表示復(fù)型,C表示字符型,L表示邏輯型。8.2.7 自定義運(yùn)算自定義運(yùn)算的完整含義是: 如果算符形式上是固有算符,那么它的算元必定不屬于表8-3里面所規(guī)定的類型; 所含有的算符為自定義算符。自定義運(yùn)算的一般句法形式(R703,R723)為: intrinsic-unary-operator y defined-operator y
52、 x intrinsic-binary-operator y x defined-operator y其中自定義算符(defined-operator)需要在一個(gè)具有通用標(biāo)識(shí)符OPERATOR的界面塊里用一個(gè)函數(shù)子程序來加以單獨(dú)的解釋與計(jì)算。如果自定義運(yùn)算使用了固有算符的符號(hào),意味著擴(kuò)展了其中固有算符所作用的算元的類型范圍,它的通用性需要在界面塊里說明。如果自定義運(yùn)算使用了自定義算符,那么該自定義運(yùn)算被稱為擴(kuò)展運(yùn)算,所使用的自定義算符稱為擴(kuò)展算符。8.2.8 表達(dá)式的數(shù)據(jù)類型,種別參數(shù)和形狀作為表達(dá)式的計(jì)算結(jié)果,可以說表達(dá)式終究是有它的
53、數(shù)據(jù)類型,種別參數(shù),以及形狀這些數(shù)據(jù)對(duì)象所具有的屬性,那么表達(dá)式的這些屬性終究是由它的基元的數(shù)據(jù)屬性決定的。由基元的數(shù)據(jù)屬性最終得到表達(dá)式的數(shù)據(jù)屬性,這中間需要完成全部的運(yùn)算,每經(jīng)過一次運(yùn)算,結(jié)果的數(shù)據(jù)屬性都可能隨著新的算元的加入而發(fā)生改變,唯一可以確認(rèn)的是運(yùn)算的順序,是嚴(yán)格按照算符的優(yōu)先級(jí)順序進(jìn)行的,鑒于基元本身的可能的數(shù)據(jù)屬性的多樣化,下面分小節(jié)討論表達(dá)式的的數(shù)據(jù)屬性。1. 基元的數(shù)據(jù)類型以及種別參數(shù)基元的數(shù)據(jù)屬性如果已經(jīng)直截了當(dāng)?shù)卦诼暶髡Z句當(dāng)中給予了說明,那就不是我們?cè)谶@里討論的中心?!纠?-18】INTEGER I(100,20)REAL (8.5,6,4.4)它們的數(shù)據(jù)屬性已經(jīng)顯式地
54、給出。下面我們要討論的基元類型是: 指針; 數(shù)組構(gòu)造器; 結(jié)構(gòu)構(gòu)造器; 函數(shù)。指針變量的類型,種別參數(shù)和秩都會(huì)在指針變量的聲明語句當(dāng)中予以說明。但是當(dāng)指針為待定形數(shù)組時(shí),它的形狀就是由它的目標(biāo)來決定?!纠?-19】 INTEGER,POINTER:X(:,:) INTEGER,TARGET:Y(100,200)其中X的形狀就是由Y決定的,即(100,200)。如果對(duì)指針使用固有函數(shù)NULL,那么它會(huì)返回一個(gè)非關(guān)聯(lián)指針,而非關(guān)聯(lián)指針沒有形狀,但是有秩。當(dāng)NULL()不帶變量時(shí),固有函數(shù)NULL返回的結(jié)果的類型,種別和秩由與結(jié)
55、果關(guān)聯(lián)的指針決定,跟NULL出現(xiàn)的場合有關(guān),詳見下表8-5:表8-5固有函數(shù)NULL返回的結(jié)果NULL()出現(xiàn)的場合決定結(jié)果的類型,種別參數(shù)和秩的對(duì)象指針賦值語句的右邊左邊的對(duì)象聲明語句當(dāng)中一個(gè)對(duì)象的初始化該對(duì)象一個(gè)成員的默認(rèn)初始化該成員結(jié)構(gòu)構(gòu)造器相應(yīng)的成員實(shí)元相應(yīng)的啞元DATA語句相應(yīng)的對(duì)象
56、60; 【例8-20】 下面是NULL后接變量的例子: INTERFACE ADD SUBROUTING S1(J,PI)
57、; INTEGER J INTEGER,POINTER:PI END SUBROUTING S1 SUBROUTING S2(K,PR) INTEGER K
58、 REAL,POINTER:PR END SUBROUTING S2 END INTERFACE REAL,POINTER:REAL_KER CALL ADD(10, NULL(REAL_KER) 數(shù)組構(gòu)造器的類型,種別和形狀由構(gòu)造器的形
59、式?jīng)Q定。它的秩為1,而尺度等于其中元素的個(gè)數(shù),它的類型和種別與其中任意一個(gè)元素的一致,因?yàn)樗乃性氐念愋秃头N別都必定是相同的?!纠?-21】 給出一個(gè)構(gòu)造器: (/2.4_2, 5.9_1, 9.4_1, 6.4_1)為實(shí)型,種別參數(shù)為2,尺度為4.結(jié)構(gòu)構(gòu)造器的類型就是派生類型的類型名稱,一個(gè)結(jié)構(gòu)構(gòu)造器總是標(biāo)量,而結(jié)構(gòu)不具有種別參數(shù)?!纠?-22】 給出下面的結(jié)構(gòu)構(gòu)造器: SAMPLE(5.0, “ALPHA”)它的類型就是SAMPLE.函數(shù)的類型,種別和形狀的決定有以下幾種情形: 在引用函數(shù)的程序單位里對(duì)函數(shù)進(jìn)行了隱式聲明;
60、60; 在引用函數(shù)的程序單位里對(duì)函數(shù)進(jìn)行了顯式聲明; 函數(shù)具有顯式界面(如果界面不是顯式的,那么函數(shù)或者是外部函數(shù),或者是語句函數(shù))。如果界面是顯式的,屬性的決定有如下幾種情形: 引用函數(shù)的程序單位里的界面塊里,有對(duì)函數(shù)的類型聲明以及其他說明語句; 對(duì)內(nèi)部過程或模塊過程的類型聲明以及其他說明語句說明了函數(shù); 被引用的特定的固有函數(shù)的描述。注意,由于固有函數(shù)和帶界面塊的函數(shù)可能是通用的,因此它們的屬性由特定函數(shù)引用的實(shí)元決定?!纠?-23】&
61、#160; REAL FUNCTION FUN(A) DIMENSION FUN(20,50)上面的語句是給出了內(nèi)部函數(shù)FUN的程序單位的一部分,那么要引用函數(shù)FUN(8.1),它的類型就是默認(rèn)實(shí)型,形狀為(20,50)?!纠?-24】 REAL(DOUBLE)A(30,50) COS(A)函數(shù)COS的界面在
62、固有函數(shù)COS的定義里給出,這里引用的函數(shù)COS(A)為雙精度實(shí)型,形狀為(30,50)。當(dāng)函數(shù)是外部函數(shù)或?yàn)檎Z句函數(shù)時(shí),界面就是隱式的,這時(shí)形狀總是標(biāo)量,而其他屬性則由默認(rèn)隱式類型聲明所規(guī)定,或者是由語句函數(shù)的顯式聲明決定。【例8-25】 IMPLICIT REAL (SINGLE)(A) FUN(X)其中的FUN(X)就是一個(gè)單精度實(shí)型標(biāo)量。如果變量或函數(shù)是屬于待定形或啞形數(shù)組,會(huì)有以下
63、幾種情形: 對(duì)于待定形數(shù)組,它的秩已經(jīng)被聲明,但是它的每個(gè)維度的尺度需要在運(yùn)行ALLOCATE語句或指針賦值語句之后才能確定。 對(duì)于啞形數(shù)組,它的秩已經(jīng)被聲明,但是它的形狀需要子程序運(yùn)行之后給出。 對(duì)于指針來說,則需要由被關(guān)聯(lián)到指針的目標(biāo)來確定形狀。因此一般說來待定形或啞形數(shù)組,只能在運(yùn)行時(shí)間才能確定形狀。2. 運(yùn)算結(jié)果的類型與種別參數(shù)對(duì)固有類型算元進(jìn)行固有算符的運(yùn)算的結(jié)果的類型,已經(jīng)在表8-3給出,因此現(xiàn)在只需要討論決定種別參數(shù)的規(guī)則。運(yùn)算分為兩類:
64、 非數(shù)值運(yùn)算。 數(shù)值運(yùn)算。對(duì)于非數(shù)值運(yùn)算有如下情形: 固有關(guān)系運(yùn)算:種別參數(shù)為默認(rèn)邏輯型。 固有邏輯運(yùn)算:如果算元具有相同的種別參數(shù),則結(jié)果與之保持一致;如果算元具有不同的種別參數(shù),則由編譯器決定。 固有字符運(yùn)算: 算元與結(jié)果的種別參數(shù)必定保持一致,長度參數(shù)則是兩個(gè)算元的長度的和。對(duì)于數(shù)值運(yùn)算,有如下情形: 一元運(yùn)算:保持算元的種別參數(shù)不變。 二元運(yùn)算:兩個(gè)算元如果是不
65、同數(shù)據(jù)類型,則按照表8-3決定;兩個(gè)算元如果是相同數(shù)據(jù)類型與種別參數(shù),則結(jié)果保持不變;如果兩個(gè)算元都是整型,種別參數(shù)不同,那么結(jié)果取冪次范圍大的,如果冪次范圍一樣大,則由編譯器決定;如果兩個(gè)算元都是實(shí)型或復(fù)型,種別參數(shù)不同,那么結(jié)果取精度大的,如果精度一樣大,則由編譯器決定。 對(duì)于二元數(shù)值運(yùn)算,基本的規(guī)則可以理解為:如果把從整數(shù)到最高精度的復(fù)數(shù)按照集合包含關(guān)系排列起來,那么只要兩個(gè)算元的種別參數(shù)不同,結(jié)果總是取所屬集合更大的算元的種別參數(shù)。上面討論的是針對(duì)固有類型數(shù)據(jù)的固有運(yùn)算,對(duì)于自定義運(yùn)算,結(jié)果的類型以及種別參數(shù)由被引用的運(yùn)算的界面塊給出,也即在界面塊里說明的作為自定義運(yùn)算的函
66、數(shù)名的類型以及種別參數(shù)?!纠?-26】 INTERFACE OPERATOR(.PLUS.) TYPE(SET)FCN_SET_PLUS(X, Y) TYPE(SET), INTENT(IN):X,Y END FUNCTION FCN_S
67、ET_PLUS TYPE(ADD) FCN_SET_PLUS(X, Y) TYPE(ADD) , INTENT(IN):X,Y END FUNCTION FCN_SET_PLUS END INTERFACE在得到上面的算符定義之后,如果取類型SET的對(duì)象A和B,那么表達(dá)式A.PLUS.B
68、的類型也為SET,無種別參數(shù);如果取類型ADD的對(duì)象A和B,那么表達(dá)式A.PLUS.B的類型也為ADD,無種別參數(shù)。3. 表達(dá)式的形狀 表達(dá)式形狀的決定同樣是從基元開始,按照算符的優(yōu)先級(jí)順序,逐步從底層到高層而決定的。但是形狀的決定比類型與種別參數(shù)的決定要簡單,因?yàn)槎\(yùn)算的2個(gè)算元的形狀要求具有一定的關(guān)系: 二元固有運(yùn)算的2個(gè)算元必須保證形狀的一致性,也就是兩個(gè)算元或者是相同形狀的數(shù)組,或者至少有一個(gè)算元是標(biāo)量。 對(duì)于二元自定義運(yùn)算,則2個(gè)算元或者與定義的函數(shù)的相應(yīng)啞元保持
69、一致,或者相互也保持一致。其結(jié)果的形狀自然也保持不變。因此結(jié)果的形狀的決定也就相應(yīng)比較簡單了。 一元運(yùn)算不改變算元的形狀。 如果基元是常量,變量,構(gòu)造器,或函數(shù),則結(jié)果的形狀分別就是常量,變量,構(gòu)造器,或函數(shù)名稱。 如果基元是對(duì)固有函數(shù)NULL的引用,那么結(jié)果的形狀就與基元無關(guān)。而由被關(guān)聯(lián)到結(jié)果的指針決定。 結(jié)構(gòu)構(gòu)造器總是標(biāo)量。 數(shù)組構(gòu)造器總是秩為1,尺度等于元素?cái)?shù)目的數(shù)組。 二元
70、固有運(yùn)算的算元只要有一個(gè)是數(shù)組,結(jié)果就是相應(yīng)的數(shù)組,否則就是標(biāo)量。 對(duì)于自定義運(yùn)算來說,如果算元的形狀與啞元保持一致,結(jié)果的形狀就是定義運(yùn)算的函數(shù)名稱,或者如果定義的函數(shù)是基元性的,則結(jié)果的形狀就是數(shù)組算元的形狀?!纠?-27】 INTERFACE OPERATOR(/) FUNCTION FCN_CONCAT(A,B) &
71、#160; CHARACTER (*,1) A CHARACTER (*,2) B CHARACTER (LEN(A)+LEN(B),2) FCN_CONCAT (SIZE(B) END FUNCTION FCN_CONCAT &
72、#160; END INTERFACE設(shè)X是種別參數(shù)為1,長度為30的字符型標(biāo)量,Y是種別參數(shù)為2,長度為50的字符型數(shù)組,其形狀為(25)。那么考慮X/Y的屬性:由于算符/的界面里的FCN_CONCAT的類型聲明就決定了表達(dá)式X/Y的結(jié)果為種別參數(shù)2的字符型,結(jié)果的長度為2個(gè)算元的長度之和,即80,結(jié)果的形狀是秩為1,而尺度等于相應(yīng)于啞元B的實(shí)元Y的尺度,也就是形狀為(25)。4. 表達(dá)式的寬度在大多數(shù)情形下,數(shù)組表達(dá)式的寬度并不需要特別的考慮,因?yàn)橐恢滦缘囊笾簧婕暗矫總€(gè)維度的尺度。不過如果數(shù)組表達(dá)式是固有函數(shù)LBOUND和UBOUND的ARRAY變量的,數(shù)組表達(dá)式的寬度就需要加以考慮了。固有函數(shù)LBOUND和UBOUND含有兩個(gè)關(guān)鍵詞變量:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐廳前臺(tái)服務(wù)總結(jié)
- 酷咖食品科技產(chǎn)業(yè)園建設(shè)項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)拿地
- 10月石家莊房地產(chǎn)市場調(diào)研總結(jié)報(bào)告
- 2025-2030全球環(huán)錠細(xì)紗機(jī)單錠檢測系統(tǒng)行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國有機(jī)天然肥料行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國風(fēng)冷單螺桿式冷水機(jī)組行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國航空航天設(shè)備零部件用超聲波清洗機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國網(wǎng)紅孵化服務(wù)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025-2030全球電池護(hù)照(DDP)行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國冷加工噴丸機(jī)行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 蘇教版四年級(jí)數(shù)學(xué)下冊(cè)第三單元第二課時(shí)《常見的數(shù)量關(guān)系》課件
- 浙江省臺(tái)州市2021-2022學(xué)年高一上學(xué)期期末質(zhì)量評(píng)估政治試題 含解析
- 寧夏“8·19”較大爆燃事故調(diào)查報(bào)告
- 中國高血壓防治指南(2024年修訂版)解讀課件
- 2024年浙江省中考科學(xué)試卷
- 初三科目綜合模擬卷
- 2024年全國高考新課標(biāo)卷物理真題(含答案)
- 勞動(dòng)合同薪酬與績效約定書
- 消除醫(yī)療歧視管理制度
- 足療店?duì)I銷策劃方案
- 學(xué)校安全一崗雙責(zé)
評(píng)論
0/150
提交評(píng)論