計算機程式語言詳解
計算機程式語言,用於表達數字計算機的一組詳細指令的各種語言。 當這些指令處於稱為機器語言的計算機制造商特定數字形式時,在用相應組合語言表達的簡單替換過程之後,或者在從某些“更高級別”語言翻譯之後,可以直接執行這些指令。 雖然有許多計算機語言,但相對較少被廣泛使用。
機器和組合語言是“低級別的”,要求程式設計師明確管理計算機的所有資料儲存和操作的特殊功能。 相比之下,高階語言可以防止程式設計師擔心這些注意事項,並提供程式設計師更容易編寫和讀取的符號。
語言型別
機器語言和組合語言(Machine and assembly languages)
演算法語言(Algorithmic languages)
FORTRAN
ALGOL
LISP
C
面向商業的語言(Business-oriented languages)
COBOL
SQL
面向教育的語言(Education-oriented languages)
BASIC
Pascal
Logo
Hypertalk
面向物件的語言(Object-oriented languages)
C++
Ada
Java
Visual Basic
宣告性語言(Declarative languages)
指令碼語言(Scripting languages)
文件格式化語言(Document formatting languages)
TeX
PostScript
SGML
全球資訊網顯示語言(World Wide Web display languages)
HTML
XML
Web scripting
元素程式語言(Elements Of Programming)
Control structures
Data structures
語言型別
機器語言和組合語言(Machine and assembly languages)
機器語言由特定計算機可以直接執行的運算元字程式碼組成。 程式碼是0和1的字串,或二進位制數字(“位”),它們經常被轉換為十六進位制(基數16)以供人類檢視和修改。 機器語言指令通常使用一些位來表示操作,例如加法,一些用於表示運算元,或者可能用於表示下一條指令的位置。 機器語言難以讀寫,因為它不像傳統的數學符號或人類語言,並且其程式碼因計算機而異。
組合語言旨在輕鬆轉換為機器語言。 儘管可以通過名稱而不是通過其機器地址來引用資料塊,但是組合語言不提供組織複雜資訊的更復雜的方法。 與機器語言一樣,組合語言需要詳細瞭解內部計算機體系結構。 當這些細節很重要時,如在程式設計計算機以與輸入/輸出裝置(印表機,掃描器,儲存裝置等)互動時,它是有用的。
演算法語言(Algorithmic languages)
演算法語言旨在表達數學或符號計算。 它們可以用類似於數學的符號表示代數運算,並允許使用包含常用操作的子程式進行重用。 它們是第一種高階語言。
FORTRAN
第一個重要的演算法語言是FORTRAN(公式轉換),由John Backus領導的IBM團隊於1957年設計。 它旨在用於實數的科學計算,並將它們的集合組織為一維或多維陣列。 其控制結構包括條件IF語句,重複迴圈(所謂的DO迴圈)和允許非順序執行程式程式碼的GOTO語句。 FORTRAN使得用於常見數學運算的子程式變得方便,並且構建了它們的庫。
FORTRAN還旨在轉化為高效的機器語言。 它立即成功並繼續發展。
ALGOL
ALGOL(演算法語言)由美國和歐洲電腦科學家委員會在1958年至1960年期間設計,用於釋出演算法以及進行計算。 與LISP(在下一節中描述)一樣,ALGOL具有遞迴子程式 - 可以呼叫自身來解決問題的過ALGOL為描述程式語言Backus-Naur Form的結構提供了一種符號,Backus-Naur Form在某些變體中成為說明程式語言語法(語法)的標準工具。 ALGOL在歐洲廣泛使用,多年來它仍然是計算機演算法釋出的語言。 許多重要的語言,如Pascal和Ada(後面都有描述),都是它的後代。程,將其減少為同類的較小問題。 ALGOL引入了塊結構,其中程式由可能包含資料和指令的塊組成,並且具有與整個程式相同的結構。 塊結構成為用於構建小型元件的大型程式的強大工具。
LISP
LISP(列表處理)是由約翰麥卡錫在麻省理工學院(MIT)於1960年開發的,它建立在遞迴函式的數學理論之上(其函數出現在它自己的定義中)。 LISP程式是應用於資料的函式,而不是FORTRAN和ALGOL中的一系列程式步驟。 LISP使用一種非常簡單的表示法,其中操作及其運算元在括號列表中給出。例如,(+ a(* b c))代表a + b * c。雖然這看起來很尷尬,但這種符號適用於計算機。 LISP還使用列表結構來表示資料,並且由於程式和資料使用相同的結構,因此LISP程式很容易在其他程式上作為資料執行。
LISP成為人工智慧(AI)程式設計的通用語言,部分原因是由於LISP和AI工作在麻省理工學院的合作,部分原因是能夠“學習”的AI程式可以用LISP編寫為自修改程式。 LISP通過眾多方言發展,例如Scheme和Common LISP。
C
C程式語言由AT&T公司的Dennis Ritchie和Brian Kernighan於1972年開發,用於程式設計計算機作業系統。它通過較小單元的組合構建資料和程式的能力與ALGOL相當。它使用緊湊的表示法,使程式設計師能夠使用資料地址及其值進行操作。這種能力在系統程式設計中很重要,C與組合語言共享可以利用計算機內部架構的所有功能。 C及其後代C ++仍然是最常用的語言之一。
面向商業的語言(Business-oriented languages)
COBOL
COBOL(通用業務導向語言)自1959年成立以來一直被企業大量使用。計算機制造商和使用者委員會以及美國政府組織成立了CODASYL(資料系統和語言委員會),以開發和監督語言標準,以便確保其在不同系統中的可移植性。
COBOL在介紹時使用類似英語的符號小說。業務計算組織和操作大量資料,COBOL為這些任務引入了記錄資料結構。記錄將異構資料(例如姓名,ID號,年齡和地址)聚合到一個單元中。這與科學語言形成對比,在這種語言中,同質陣列是常見的。記錄是將資料“分塊”成單個物件的重要示例,它們幾乎出現在所有現代語言中。
SQL
SQL(結構化查詢語言)是一種用於指定資料庫組織(記錄集合)的語言。使用SQL組織的資料庫稱為關係資料庫,因為SQL提供了查詢資料庫以查詢屬於給定關係的資訊的功能。例如,查詢可能是“查詢包含last_name Smith和city New York的所有記錄。”商業資料庫程式通常使用類似SQL的語言進行查詢。
面向教育的語言(Education-oriented languages)
BASIC
BASIC(初學者的通用符號指令程式碼)是由John Kemeny和Thomas Kurtz於20世紀60年代中期在達特茅斯學院設計的。它旨在讓初學者,特別是非電腦科學專業的學生容易學習,並且在具有許多使用者的分時計算機上執行良好。它具有簡單的資料結構和符號,並且被解釋為:BASIC程式逐行翻譯並在翻譯時執行,這使得查詢程式設計錯誤變得容易。
它的小巧和簡潔也使BASIC成為早期個人電腦的流行語言。它最近的形式採用了其他當代語言的許多資料和控制結構,這使得它更強大但對初學者來說不太方便。
Pascal
大約1970年,瑞士的Niklaus Wirth設計了Pascal來教授結構化程式設計,強調了在沒有GOTO語句的情況下有條理地使用條件和迴圈控制結構。 雖然Pascal在表示法中類似於ALGOL,但它提供了定義用於組織複雜資訊的資料型別的能力,這是超出ALGOL以及FORTRAN和COBOL功能的功能。 使用者定義的資料型別允許程式設計師引入複雜資料的名稱,然後語言翻譯者可以在執行程式之前檢查其是否正確使用。
在20世紀70年代末和80年代,Pascal是最廣泛使用的程式設計指令語言之一。 它幾乎可以在所有計算機上使用,並且由於其熟悉性,清晰度和安全性,它被用於生產軟體和教育。
LOGO
標誌起源於20世紀60年代後期,作為教育的簡化LISP方言; Seymour Papert和其他人在麻省理工學院用它來向學齡兒童傳授數學思維。它有一個比LISP更傳統的語法,並以“烏龜圖形”為特色,這是一種生成計算機圖形的簡單方法。 (這個名字來自一個早期專案,用於編寫一個類似烏龜的機器人。)海龜圖形使用了以身體為中心的指令,其中一個物件通過命令移動到螢幕上,例如“左90”和“前進”,指定相對的動作到目前的物件的位置和方向,而不是固定的框架。與遞迴例程一起,這種技術使得編寫複雜和有吸引力的模式變得容易。
Hypertalk
Hypertalk是由Bill Atkinson為Apple的Macintosh設計的“我們其他人的程式設計”。使用簡單的類似英語的語法,Hypertalk使任何人都可以快速將文字,圖形和音訊組合成“連結堆疊”,可以通過在程式提供的標準按鈕上單擊滑鼠來導航。在20世紀80年代和90年代早期,Hypertalk在教育工作者中特別受歡迎,用於課堂多媒體演示。儘管Hypertalk具有面向物件語言的許多功能(在下一節中描述),但Apple並沒有為其他計算機平臺開發它並讓它萎靡不振;隨著蘋果公司在20世紀90年代的市場份額下降,一種新的跨平臺顯示多媒體的方式使得Hypertalk幾乎已經過時(參見全球資訊網顯示語言部分)。
面向物件的語言(Object-oriented languages)
面向物件的語言有助於管理大型程式的複雜性。物件打包資料及其上的操作,以便只有操作可公開訪問,並且隱藏資料結構的內部細節。通過允許程式設計師單獨考慮程式的每個部分,這種資訊隱藏使大規模程式設計變得更容易。此外,物件可以從更一般的物件派生,“繼承”它們的能力。這樣的物件層次結構使得可以定義專用物件而不重複更一般的物件中的所有物件。
面向物件的程式設計始於Simula語言(1967),它為ALGOL添加了隱藏資訊。另一個有影響力的面嚮物件語言是Smalltalk(1980),其中一個程式是一組通過彼此傳送訊息來互動的物件。
C ++
C ++語言由Bjarne Stroustrup在20世紀80年代中期在AT&T開發,通過在保留C程式效率的同時新增物件來擴充套件C語言。它一直是教育和工業程式設計最重要的語言之一。許多作業系統的大部分,例如Microsoft Corporation的Windows 98,都是用C ++編寫的。
Ada
阿達以奧古斯塔·阿達·金(Augusta Ada King)的名字命名,她是洛夫萊斯的伯爵夫人,曾是19世紀英國發明家查爾斯·巴貝奇的助手,有時被稱為第一位計算機程式設計師。阿達語是20世紀80年代初為美國國防部開發的大規模節目。它將類似Pascal的表示法與將操作和資料打包成獨立模組的能力相結合。它的第一個形式Ada 83並不是完全面向物件的,但隨後的Ada 95提供了物件以及構造它們的層次結構的能力。雖然Ada不再被授權用於國防部的工作,但仍然是工程大型專案的有效語言。
Java
在20世紀90年代早期,Java由Sun Microsystems,Inc。設計,作為全球資訊網(WWW)的程式語言。雖然它在外觀上類似於C ++,但它完全是面向物件的。特別是,Java省去了較低級別的功能,包括操作資料地址的能力,這種功能在分散式系統的程式中既不可取也不實用。為了便於移植,Java程式由特定於每個計算機平臺的Java虛擬機器翻譯,然後執行Java程式。除了通過Web“applet”向Internet新增互動功能之外,Java還被廣泛用於編寫小型行動式裝置,例如行動電話。
Visual Basic
Visual Basic是由Microsoft開發的,通過新增物件和“事件驅動”程式設計來擴充套件BASIC的功能:按鈕,選單和圖形使用者介面(GUI)的其他元素。 Visual Basic也可以在其他Microsoft軟體中用於編寫小例程。
宣告性語言(Declarative languages)
宣告性語言,也稱為非過程或非常高級別,是程式語言,其中(理想情況下)程式指定要執行的操作而不是如何執行。在這些語言中,程式的規範與其實現之間的差異小於到目前為止所描述的過程語言。兩種常見的宣告性語言是邏輯和函式語言。
邏輯程式語言,其中PROLOG(邏輯程式設計)是最熟知的,將程式稱為一組邏輯關係(例如,祖父母是某人的父母的父母)。這些語言類似於SQL資料庫語言。程式由“推理引擎”執行,該推理引擎通過系統地搜尋這些關係來回答查詢以做出將回答查詢的推斷。 PROLOG已廣泛用於自然語言處理和其他AI程式。
功能語言具有數學風格。通過將函式應用於引數來建構函式程式。功能語言,如LISP,ML和Haskell,被用作語言開發,自動數學定理證明器和一些商業專案中的研究工具。
指令碼語言(Scripting languages)
指令碼語言有時被稱為小語言。它們旨在解決相對較小的程式設計問題,這些問題不需要資料宣告的開銷和使大型程式易於管理所需的其他功能。指令碼語言用於編寫作業系統實用程式,用於特殊用途的檔案操作程式,並且因為它們易於學習,有時用於相當大的程式。
PERL(實用提取和報告語言)是在20世紀80年代後期開發的,最初用於UNIX作業系統。它旨在擁有早期指令碼語言的所有功能。 PERL提供了許多方式來陳述常見操作,從而允許程式設計師採用任何方便的方式。在20世紀90年代,它成為一種系統程式設計工具,無論是小型實用程式還是大型原型程式。與下面討論的其他語言一起,它也變得流行於程式設計計算機Web“伺服器”。
文件格式化語言(Document formatting languages)
文件格式化語言指定列印文字和圖形的組織。它們分為幾類:文字格式符號可以提供與文書處理程式相同的功能,頁面描述語言由列印裝置解釋,最常見的是標記語言,用於描述文件各部分的預期功能。
TeX
TeX是1977-86期間開發的,由斯坦福大學教授唐納德·克努特(Donald Knuth)用作文字格式化語言,以提高他書中數學符號的質量。文字格式化系統與WYSIWYG(“所見即所得”)字處理器不同,在文件中嵌入純文字格式化命令,然後由語言處理器解釋這些命令以生成用於顯示或列印的格式化文件。 TeX標記斜體文字,例如,{\ it it is iticicized},然後顯示為斜體。
TeX很大程度上取代了早期的文字格式語其強大而靈活的功能使專家能夠精確控制字型的選擇,表格的佈局,數學符號以及文件中圖形的包含。它通常在“巨集”包的幫助下使用,這些包定義了用於常見操作的簡單命令,例如啟動新段落; LaTeX是一種廣泛使用的包。 TeX包含用於不同型別文件的許多標準“樣式表”,並且這些可以由每個使用者進一步調整。還有一些相關的程式,如BibTeX,管理書目,並具有所有常見書目樣式的樣式表,以及具有各種字母的語言的TeX版本。
PostScript
PostScript是一種頁面描述語言,由Adobe Systems Incorporated在20世紀80年代早期在Xerox PARC(Palo Alto研究中心)的工作基礎上開發。這些語言描述的檔案可以由個人計算機解釋,以在其螢幕上或通過印表機或排版裝置中的微處理器顯示文件。
例如,PostScript命令可以以各種字型和大小精確定位文字,繪製數學描述的影象,並指定顏色或陰影。 PostScript使用字尾,也稱為反向波蘭表示法,其中操作名稱跟隨其引數。因此,“300 600 20 270弧形行程”意味著:在位置(300,600)處繪製(“行程”)270度弧,半徑為20。儘管PostScript可以由程式設計師讀取和寫入,但它通常由文字格式化程式,文書處理器或圖形顯示工具生成。
PostScript的成功歸功於其規範屬於公共領域,並且與高解析度鐳射印表機非常匹配。它影響了列印字型的發展,製造商生產各種各樣的PostScript字型。
SGML
SGML(標準通用標記語言)是標記語言定義的國際標準;也就是說,它是一種元語言。標記由稱為標記的符號組成,這些標記指定文字的功能或如何顯示。 SGML強調描述性標記,其中標記可能是“<emphasis>”。這樣的標記表示文件功能,它可以被解釋為計算機螢幕上的反向視訊,打字機下劃線或排版文字中的斜體。
SGML用於指定DTD(文件型別定義)。 DTD通過指定文件中必須出現的元素(例如,<Title>)來定義一種文件,例如報表,併為文件元素的使用提供規則,例如段落可能出現在表條目中但是表格可能不會出現在段落中。解析程式可以分析標記的文字以確定它是否符合DTD。另一個程式可以讀取標記以準備索引或將文件翻譯成PostScript以進行列印。另一種可能會為視覺或聽覺障礙的讀者生成大型或音訊。
全球資訊網顯示語言(World Wide Web display languages)
HTML
全球資訊網是用於在計算機監視器上顯示通過因特網檢索的文字,圖形和音訊的系統。每個檢索單元稱為網頁,這些頁面通常包含允許檢索相關頁面的“連結”。 HTML(超文字標記語言)是用於編碼網頁的標記語言。它由Tim Berners-Lee於20世紀80年代在瑞士CERN核物理實驗室設計,由SGML DTD定義。 HTML標記標記指定文件元素,例如標題,段落和表格。它們標記文件以供計算機程式(稱為Web瀏覽器)顯示。瀏覽器解釋標籤,在佈局中顯示標題,段落和表格,以適應螢幕大小和可用的字型。
HTML文件還包含錨點,這些錨點是指定指向其他網頁的連結的標記。錨的形式為<A HREF= "http://www.britannica.com">EncyclopædiaBritannica</A>,其中引用的字串是連結指向的URL(通用資源定位符)(Web“地址) “)及其後面的文字是Web瀏覽器中顯示的內容,下劃線表示它是指向另一個頁面的連結。顯示為單個頁面的內容也可以由多個URL形成,一些URL包含文字和其他圖形。
XML
HTML不允許定義新的文字元素;也就是說,它不可擴充套件。 XML(可擴充套件標記語言)是SGML的簡化形式,適用於在Web上釋出的文件。與SGML一樣,XML使用DTD來定義文件型別以及它們中使用的標記的含義。 XML採用易於解析的約定,例如文件實體由開始和結束標記標記,例如<BEGIN> ... </ BEGIN>。 XML提供比HTML更多種類的超文字連結,例如雙向連結和相對於文件子部分的連結。
因為作者可以定義新標記,所以XML DTD還必須包含指示Web瀏覽器如何解釋它們的規則 - 如何顯示實體或如何生成諸如準備電子郵件之類的操作。
Web scripting
標記有HTML或XML的網頁主要是靜態文件。 Web指令碼可以在讀者使用它時向頁面新增資訊,或者讓讀者輸入可以例如傳遞給線上業務的訂單部門的資訊。 CGI(通用閘道器介面)提供了一種機制;它在讀者的Web瀏覽器和提供頁面的Web伺服器之間傳輸請求和響應。伺服器上的CGI元件包含稱為指令碼的小程式,這些程式從瀏覽器系統獲取資訊或提供用於顯示的資訊。一個簡單的指令碼可能會詢問讀者的姓名,確定讀者使用的系統的Internet地址,並列印問候語。指令碼可以用任何程式語言編寫,但是,因為它們通常是簡單的文字處理例程,所以像PERL這樣的指令碼語言是特別合適的。
JavaScript
另一種方法是使用為Web指令碼設計的語言由瀏覽器執行。 JavaScript就是這樣一種語言,由Netscape Communications Corp.設計,可以與Netscape和微軟的瀏覽器一起使用。 JavaScript是一種簡單的語言,與Java完全不同。 JavaScript程式可以嵌入到具有HTML標記<script language =“JavaScript”>的網頁中。選擇頁面後,瀏覽器將執行該標記後面的JavaScript指令。為了加速動態(互動式)頁面的顯示,JavaScript通常與XML或其他語言結合使用,以便在伺服器和客戶端瀏覽器之間交換資訊。特別是,XMLHttpRequest命令啟用來自伺服器的非同步資料請求,而不需要伺服器重新發送整個Web頁面。程式設計的這種方法或“哲學”稱為Ajax(非同步JavaScript和XML)。
VB指令碼是Visual Basic的子集。最初是為Microsoft Office程式套件開發的,後來也用於Web指令碼。它的功能類似於JavaScript,它可以以相同的方式嵌入HTML中。
使用這種指令碼語言進行Web程式設計的背後是元件程式設計的想法,其中程式是通過組合獨立的先前編寫的元件而無需任何進一步的語言處理來構造的。 JavaScript和VB Script程式被設計為可以附加到Web瀏覽器的元件,以控制它們顯示資訊的方式。
元素程式語言(Elements Of Programming)
儘管存在符號差異,但當代計算機語言提供了許多相同的程式設計結構。這些包括基本控制結構和資料結構。前者提供表達演算法的手段,後者提供組織資訊的方法。
控制結構(Control structures)
用過程語言編寫的程式,最常見的類似於食譜,有成分列表和使用它們的逐步說明。幾乎每種程式語言中的三種基本控制結構是:
1.順序 - 混合液體成分,然後加入乾燥的成分。
2.有條件 - 如果西紅柿是新鮮的,那麼煨它們,但如果罐裝,跳過這一步。
迭代擊敗蛋清直到形成軟峰。
Sequence是預設的控制結構;說明一個接一個地執行。例如,它們可以執行一系列算術運算,將結果分配給變數,以找到二次方程ax2 + bx + c = 0的根。條件IF-THEN或IF-THEN-ELSE控制結構允許程式遵循替代執行路徑。迭代或迴圈為計算機提供了大部分功能。他們可以根據需要重複一系列步驟,適當重複非常簡單的步驟可以解決複雜的問題。
可以組合這些控制結構。序列可能包含幾個迴圈;迴圈可以包含巢狀在其中的迴圈,或者條件的兩個分支可以包含具有迴圈和更多條件的序列。在本文中使用的“虛擬碼”中,“*”表示乘法,“←”用於為變數賦值。以下程式設計片段使用IF-THEN結構來查詢二次方程的一個根,使用二次方程式:
二次公式
二次公式假設a是非零並且判別式(平方根符號內的部分)不是負的(為了獲得實數根)。條件檢查這些假設:
- IF a = 0 THEN
- ROOT ← −c/b
- ELSE
- DISCRIMINANT ← b*b − 4*a*c
- IF DISCRIMINANT ≥ 0 THEN
- ROOT ← (−b + SQUARE_ROOT(DISCRIMINANT))/2*a
- ENDIF
- ENDIF
上述片段中使用的SQUARE_ROOT函式是子程式(也稱為過程,子例程或函式)的示例。子程式就像是一次給出的醬汁配方,並作為許多其他食譜的一部分使用。子程式接受輸入(需要的數量)併產生結果(醬汁)。常用的子程式通常位於提供語言的集合或庫中。子程式可以在其定義中呼叫其他子程式,如以下程式所示(其中ABS是絕對值函式)。 SQUARE_ROOT是通過使用WHILE(不定)迴圈實現的,該迴圈產生實數的平方根的良好近似,除非x非常小或非常大。通過宣告其名稱,輸入資料型別和輸出來編寫子程式:
- FUNCTION SQUARE_ROOT(REAL x) RETURNS REAL
- ROOT ← 1.0
- WHILE ABS(ROOT*ROOT − x) ≥ 0.000001
- AND WHILE ROOT ← (x/ROOT + ROOT)/2
- RETURN ROOT
子程式可以將問題分解為更小,更易處理的子問題。 有時可以通過將問題減少到原始版本較小的子問題來解決問題。 在這種情況下,例程被稱為遞迴子程式,因為它通過重複呼叫自身來解決問題。 例如,數學中的階乘函式(n!= n∙(n-1)⋯3∙2∙1,即前n個整數的乘積)可以程式設計為遞迴例程:
- FUNCTION FACTORIAL(INTEGER n) RETURNS INTEGER
- IF n = 0 THEN RETURN 1
- ELSE RETURN n * FACTORIAL(n−1)
遞迴的優點在於它通常是對精確定義的簡單重述,避免了迭代解決方案的簿記細節。
在機器語言級別,迴圈和條件是用分支指令實現的,分支指令說“跳轉到”程式中的新點。高階語言中的“goto”語句表達相同的操作,但很少使用,因為它使人類難以遵循程式的“流程”。某些語言(如Java和Ada)不允許這樣做。
資料結構(Data structures)
控制結構組織演算法,而資料結構組織資訊。特別是,資料結構指定資料型別,因此可以對它們執行哪些操作,同時消除了程式設計師跟蹤儲存器地址的需要。簡單的資料結構包括整數,實數,布林值(真/假),以及字元或字串。通過組合一個或多個數據型別來形成複合資料結構。
最重要的複合資料結構是陣列,同類資料集合,以及記錄,異構集合。陣列可以表示數字向量,字串列表或向量集合(陣列陣列或數學矩陣)。記錄可以儲存員工資訊名稱,職稱和薪水。記錄陣列(例如員工表)是元素的集合,每個元素都是異構的。相反,記錄可能包含一個向量,即一個數組。
記錄元件或欄位按名稱選擇;例如,E.SALARY可能代表記錄E的工資欄位。陣列元素由其位置或索引選擇; A [10]是陣列A中位置10的元素。因此FOR迴圈(確定迭代)可以通過具有索引限制的陣列(在下面的示例中為FIRST TO LAST)執行,以便對其元素求和:
- FOR i ← FIRST TO LAST
- SUM ← SUM + A[i]
陣列和記錄具有固定的大小。 可以增長的結構是使用動態分配構建的,可根據需要提供新的儲存。 這些資料結構具有元件,每個元件包含資料和對其他元件的引用(以機器術語,它們的地址)。 這種自引用結構具有遞迴定義。 例如,bintree(二叉樹)要麼是空的,要麼包含帶有資料的根元件以及左右bintree“children”。這樣的bintree有效地實現了資訊表。 對它們進行操作的子程式自然是遞迴的; 以下例程打印出bintree的所有元素(每個都是某個子樹的根):
- PROCEDURE TRAVERSE(ROOT: BINTREE)
- IF NOT(EMPTY(ROOT))
- TRAVERSE(ROOT.LEFT)
- PRINT ROOT.DATA
- TRAVERSE(ROOT.RIGHT)
- ENDIF
抽象資料型別(ADT)對於大規模程式設計很重要。他們將資料結構和操作打包在其上,隱藏內部細節。例如,ADT表為使用者提供插入和查詢操作,同時保持底層結構(無論是陣列,列表還是二叉樹)不可見。在面嚮物件語言中,類是ADT,物件是它們的例項。下面的面向物件的虛擬碼示例假定存在ADT bintree和“超類”COMPARABLE,表徵存在比較操作的資料(例如整數的“<”)。它定義了一個新的ADT,TABLE,它隱藏了它的資料表示並提供了適合於表的操作。此類根據COMPARABLE類的元素型別引數進行多型定義。它的任何例項都必須指定該型別,這裡是一個帶有員工資料的類(COMPARABLE宣告意味著PERS_REC必須提供比較操作來對記錄進行排序)。實現細節被省略。
&n