APL

一種計算機語言

APL語言(APL,A Programming Language的縮寫)是一種表達能力很強的會話語言。應用範圍包括數學統計、事務經營、信息檢索、報表生成、財務預算等。它也可用於模擬計劃管理、圖形處理、正文編輯、計算機輔助教學等方面。APL的特點是,語法規則簡單,運算符豐富,表達式簡練,並包含多種構造和處理數據的運算符。它在數據加工和矩陣計算上特別有效,不過程序員具有較高的數學素養。

肯尼斯·艾佛森在1962年設計這個語言時他正在哈佛大學工作,1979年他因對數學表達式和編程語言理論的貢獻而得到圖靈獎。在過去數十年的使用歷史中,APL 從它的原始版本開始不斷改變和發展,今天的版本與1963年發表時的版本已經非常不一樣了。但它始終是一種解釋執行的計算機語言。現代的 APL 版本支持其初始版本不支持的結構和模式編程。APL 至今依然使用一種非標準化的字母表,這一直是他人對 APL 的批評。

概括介紹


APL語言是在1960年左右由IBM的Kenneth E.Iverson設計的,起初並沒有想實現這種程序設計語言,只是用它作為描述計算機體系結構的工具。APL最早是在名為《一種程序設計語言(A Programming Language)》的書中介紹的,這也是它名字的由來。在20世紀60年代中期,IBM開發出了APL語言最早的實現。
APL 的工作環境被稱為工作場。在這個工作場內用戶可以定義程序和數據。數據也可以在工作場在程序外存在。
APL語言已經存在了超過45年,雖然並不廣泛但今天仍在使用,而且在此期間變化不大。
在許多應用場合下(數學、科學、工程技術、電腦設計、機器人、數據顯示、保險技術、傳統的數據處理等等)APL是一種非常有力的、表達豐富的和簡明的編程語言。它一般被用在一個與用戶介面的環境中。它最初的設計目的是將數學公式寫成一種電腦可以理解的方式。學它一般很容易,但要分析 APL 寫成的程序往往需要一段時間。與傳統的結構式編程語言不同的是,APL 的程序一般由一系列使用在序列上的單元的或雙元的函數運算符號組成。由於APL擁有許多非標準的運算符號,這些符號之間沒有優先性(比如一般數學中的乘號、除號較加號、減號有優先權,APL中沒有這樣的優先權)。最初的APL語言沒有任何控制結構如循環(do-while)或者條件選擇(if-then-else),但一些序列運算符號可以用來模擬編程結構,比如iota(用來獲得一個從1至N的序列)可以用來模擬循環(for)。
APL語言具有大量功能強大的運算符,對實現者造成了困難。最初,使用APL語言的方法是通過IBM的列印終端,這些終端有特殊的列印球,提供語言所需的特殊的字符集。APL語言具有這麼多運算符的原因之一是因為它提供了大量數組的單元運算。例如,任意矩陣的轉置只需一個運算符即可實現。大量的運算符提供了極強的表達能力,但也使得APL程序很難閱讀,使人們認為APL是一種最適於用來“一次性”程序設計的語言:雖然用APL語言寫起程序來很快,但是程序在使用過後就應該扔掉,因為程序難以維護。

語言標準


1954年,美國哈佛大學在Aiken教授主持下開設了數據處理這樣一門新課程,Iverson作為其中一員參加了。在那裡APL作為一種為記述和解析數據處理方法的表記法而誕生了,而且還將它編入哈佛大學的救科書,F.Brooks著的“Automatic Date Processing”(自動數據處理)一書中。Iverson關於APL語言的構思就是在這樣的土壤里萌發的。
這樣,由於APL的誕生是其他工作途中偶然的成果,開始出現的時間稍有些模糊,大約為1956年初吧。此後,Iverson曾供職McKinsey公司任經營顧閱等職務,繼而加入了IBM公司。在IBM公司,他的工作是使IBM系統/360命令標準化,從而結交了一個朋友Adin Falkoff,此人後來對APL語言的發展起了很大的推動作用,以這時(1962年)所著的“A Programming Language”(一種程序設計語育)一書為基礎,Iverson的表記法作為APL語言固定下來了。此時,已作出了各種各樣的單目(monadic)、雙目(dyadic)函數,為統一句法,按照語言的格式進行了各種規整,如設法使絕對值的記|X|定為|X等。但是,那時APL還未能成為可以在計算機上運行的語言,始終是用於演演算法和邏輯設計的紙上語言。
APL能在現實的計算機上運行,是1964年以後J.Lawrence,H.Hellerman等人在工具語言方面精誠合作的結果。APL字元的表示是在IBM 1050終端上進行的,該終端具有可交換的高爾夫球型的打字元件。為了便於印表機打字,APL記號也有把上標、下標變成一行的。
起初,APL是在IBM 7090計算機上利用卡片輸入,以分批方式運行的,1966年,L.Breed,P.Abrams使之在S/360計算機的TSM(time-sharing monitor)上以翻譯器方式運行。1969年用APL/360規整成系統代碼,又利用工作區開發程序,其管理變得更為有效。
繼而,在數據文件和外部的對話方面,採用了共用變數和輔助處理程序的概念,變成APL SV。
再往後,APL再S/370計算機的TSO、CMS等各種OS上,經統一合併變成VS APL。
正如Iverson講演稿的感謝部分說說,實際上,從最早的合作者Falkoff開始,許多人都參與了APL的規整、擴充、裝備等方面的工作。
自70年代起。APL從誕生地IBM費城科學中心向IBM公司內的用戶推廣,後來,進一步製成軟體製品向一般的計算機用戶推廣開來。接著,Barrows、UniVac、DEC甚至日本的富士通日立等許多計算機製造廠也生產出APL軟體製品。
APL這樣的程序設計語言,已是歷迎長久的語言了,但最近,它又迎來了第二個發展高峰。一方面是語言本身的又一次大飛躍,產生了APL2,大幅度地擴充和強化了APL的功能,引入稱為廣義數組的嵌套數組(在數組中能套數組)和混合數組(數值和字元串可混用)等。在科學技術計算中,進行複數運算時已可以用不完全相同的式子來區別實部和虛部。
另一方面是APL的計算機環境的變化。半導體CPU的高性能化和存儲器的高集成度化,使APL可以往微機上運行。以IBM 5100為開端,出現了備種個人用APL,在IBM 5550上增加了日本語APL。在微型信息處理機8086、68000上,作為操作系統(OS)的CP/M、MS—DOS、UNIX等上運行的各種APL也已問世。

特點


①APL不像Basic、Fortran等程序設計語言那樣,使用很多英語關鍵字(如read、write、for、next…),它使用數字和各種符號作為文字進行程序設計。這些文字是以功能為基礎想象出來的計算機世界的象形文字,擺脫了英語的束縛,便於程序設計語言的普及。
②APL是像使用計算器一樣簡便的語言。這是因為APL不是編譯型語言,而是解釋型語言。程序一旦輸入,就立即執行,而且不必對使用變數及其類型等進行說明。它排除了計算機機械的制約,單刀直入地解決用戶的問題。
③APL是把數據集中處理的語言,這是APL的最大特徵。通常,其他語言在處理大量數據時。要使用循環語句對數據一個一個加以處理。APL則是把數據作為數組形式集中處理。這是APL語言簡潔的關鍵所在。
④APL通用性很強,從簡單使用到高級數據處理都能做。在日常事物中,可用於排序、製表,從檢索到構築資料庫;在國民經濟統計部門,APL最適合做統計計算;在科研部門,它適用於實驗數據整理、合計以及微分方程和積分方程的計算;APL也適用於決策處理等人工智慧領域。