Plankalkül
Plankalkül(德語發音:[ˈplaːnkalkyːl])是康拉德·楚澤在1942至1945年間,出於工程目的而設計的一種程式語言。它是第一種為計算機設計的高級程式語言。
編程範型 | 過程式 |
---|---|
設計者 | Konrad Zuse |
釋出時間 | 1948年 | – 概念首次發表
主要實作產品 | |
Plankalkül-Compiler(柏林自由大學於2000年實現[1]) | |
影響語言 | |
Superplan, ALGOL 58[2] |
「Kalkül」在德語中意為形式系統。如希爾伯特演繹系統原本名為「Hilbert-Kalkül」那樣,「Plankalkül」指用於規劃(planning)的形式系統[3]。
描述
編輯Plankalkül可比較於APL和關係代數。它包括賦值語句、子例程、條件語句、迭代、浮點算術、陣列、層級記錄結構、斷言、例外處理和其他高級特徵比如目標導向執行。Plankalkül提供了叫做「廣義圖」(verallgemeinerter Graph)的數據結構,它可以被用來表示幾何結構[4]。
Plankalkül的很多特徵重現於後來的程式語言之中;一個例外是其特質性的使用佔據多行的表示法。
Plankalkül的一些特徵[5]:
數據類型
編輯在Plankalkül中唯一的原始數據類型是單一的位或布爾(德語:Ja-Nein-Werte,Zuse術語的「是-否-值」)。它被指稱為標識符 。所有進一步的數據類型都是合成的,並且從原始類型通過「陣列」和「記錄」的方式建造而成[6]。
所以8位序列(這在現代計算中被當作字節)被指稱為 ,而大小為 乘 的布爾陣列,被描述為 。還存在更短的表示法,可以用 替代 [6]。
類型 可以由兩個可能的值 和 。所以4位序列可以寫為例如 ,但是在這樣的一個序列表示一個數的情況下,編程者可以使用十進制表示 [6]。
Zuse還定義了 為有序對 , 為列表 , 為有序對列表 。兩個組件(component) 和 的記錄被寫為 [6]。
Plankalkül中類型(德語:Art)構成自3個元素:結構化的值(德語:Struktur),語用意義(德語:Typ),和在可能的值上的限制(德語:Beschränkung)[6]。用戶定義的類型被標示為字母 連帶編號,比如 ,即第一個用戶定義的類型。
例子
編輯Zuse使用了來自象棋理論的很多例子[6]:
棋盤的坐標(它的大小為 所以 位就足夠了)。 | ||
棋盤的方格(例如 指稱代數記譜法中的e2)。 | ||
棋子(例如 指稱白王)。 | ||
棋盤上的棋子(例如 指稱白王在e2中)。 | ||
棋盤(棋子位置,描述64的方格都包含哪個棋子)。 | ||
遊戲狀態( 指稱棋盤, 指稱行棋玩家, 指稱王車易位的可能性( 位給白棋 位給黒棋), 指稱關於哪個單元格有可能吃過路兵)。 |
標識符
編輯標識符是字母字符連帶編號[6]。針對變量有如下標識符種類[7]:
- 輸入值(德語:Eingabewerte, Variablen),標記以字母 。
- 中間值,臨時值(德語:Zwischenwerte),標記以字母 。
- 常值(德語:Constanten),標記以字母 。
- 輸出值(德語:Resultatwerte),標記以字母 。
特定的某種變量由寫在種類之下的編號來標示[6],例如: , , 等等。
程序和子程序被標記以字母 ,跟隨着一個程序(和可選的一個子程序)編號。例如: 、 [6]。
程序 的輸出值保存在變量 中,其他子程序能在標識符 之下獲得到它,而讀取這個變量的值還意味着執行有關的子程序[6]。
按索引訪問元素
編輯Plankalkül允許使用組件(component)索引(德語:Komponenten-Index)訪問變量的單獨元素。例如,當一個程序接收輸入於具有類型 (遊戲狀態)的變量 之中,那麼 給出棋盤狀態, 給出在編號 方格中的棋子,而 給出這個棋子的位編號 [6]。
在現代程式語言中,這可以用描述為表示法類似於V0[0]
、V0[0][i]
、V0[0][i][j]
(儘管訪問單一的位在現代程式語言中典型的使用位掩碼)。
語法
編輯由於變量的索引是垂直書寫的,邏輯上一行的Plankalkül指令要求佔據4或3物理行來書寫。
一行包含變量種類,第二行標記以 (德語:Variablen-Index)包含變量編號,第三行標記以 (德語:Komponenten-Index)包含組件索引,而第四行標記以 (德語:Struktur-Index)是類型描述。類型不是必需的,但是Zuse註釋到這能幫助閱讀和理解程序[6]。
在 行中類型 前綴可以去掉,例如[6]:
,可以簡寫為 。
進一步的類型 前綴也可以去掉,例如:
,可以簡寫為 。 同義於 。
變量的索引的例子:
變量 ,它是 對的類型 的值的列表。 | |
K行在其為空時可以越過。因此這個表達式含義同於前者。 | |
變量 的第 個元素的第 (索引 )對的第 (索引 )位,擁有布爾類型 。 |
索引可以不只是常值。變量可以被用作其他變量的索引,而這被標記為折線,它展示變量的值將在哪個組件索引中使用:
變量 的第 個元素。等價於在很多現代語言中的表達式V3[Z5] [6]。
|
賦值運算
編輯Zuse在他的演算中介入了賦值算子,這個概念未知於他之前的數學中。他將其標記為 ,並稱其為產生符號(德語:Ergibt-Zeichen)。使用賦值的概念是在數學和計算機科學之間的關鍵差異[8]。
例如下列表達式:
向整數中間值 增加數量 。 | |
將值 和 合成為 所指稱的合成值。 |
有人宣稱Konrad Zuse最初使用圖元 作為賦值的符號,並在Heinz Rutishauser的影響下開始使用 [6]。Knuth和Pardo相信Zuse總是寫為 ,而 是»Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben«的出版商在1948年介入的[8]。在Zürich的ALGOL 58會議中,歐洲與會者提議使用Zuse介入的賦值符號,而美國代表團堅持採用:=
[6]。
存儲賦值結果的變量(左值)被寫在賦值算子的右側[8]。對這個變量的第一次賦值被認為是一個聲明[6]。
賦值算子的左側被用作表達式(德語:Ausdruck),它定義哪個值將被賦值到這個變量。表達式可以使用算術算子、布爾算子和比較算子( , , 等等)[6]。
控制流程
編輯布爾值被表示為整數,「否」( )為 ,而「是」( )為 。條件控制流程採用守衛語句 的形式,這裏的加點箭頭叫做「條件符號」(德語:Bedingt-Zeichen),它指示在 為「是」的條件下執行塊 。迭代算子具有如下形式:
這裏的 表示「重複規劃」(德語:Wiederholungsplan),它重複直到所有守衛成為「否」[9]。
術語
編輯Zuse稱呼一個單一的程序為「計算規劃」(德語:Rechenplan)。他設想其所稱謂的「規劃組裝設備」(德語:Planfertigungsgerät),能自動的將一個程序的數學公式轉換成機器可讀的打孔電影膠片,這是在今天稱為翻譯器或編譯器的某種東西[5]。
例子
編輯下面的例子程序計算整數的階乘:
這裏的Zuse定義的用戶類型 表示全部整數。第一行包含「邊界概要」(德語:Randauszug),它定義程序 接受一個變元(實際參數),即叫做 的一個整數,並返回叫做 的一個整數。這個程序將 賦值到 ,將 賦值到 。接着迭代算子 執行重複運算,將從 遞減至 的值,依次賦值到局部變量 ,這裏將大於 的 值累乘至 。當重複結束之時,值 就包含了變元的階乘。
Zuse還定義了用戶類型 表示自然數, 表示非負整數, 表示非負分數, 表示全部分數, 表示複數。迭代算子 、 和 接受一個非負整數 , 只重複 次而不賦值局部變量, 重複時將從 遞增至 的值賦值給局部變量 ;迭代算子 、 和 接受兩個非負整數 並賦值到局部變量 , 在 時從 遞增至 , 在 時從 遞減至 , 在 時從 遞增至 而在 時從 遞減至 。使用 ,可以省略 的初始值設置,和 的守衛條件判斷。
引用
編輯- ^ Rojas, Raúl; Göktekin, Cüneyt; Friedland, Gerald; Krüger, Mike; Scharf, Ludmila; Kuniß, Denis; Langmack, Olaf. Konrad Zuses Plankalkül — Seine Genese und eine moderne Implementierung (PDF). Hellige, Hans Dieter (編). Geschichten der Informatik. Visionen, Paradigmen, Leitmotive. Teil 3: Leitideen und Paradigmen in der Entwicklung der Programmiersprachen und der Programmierung 1. Berlin / Heidelberg, Germany: Springer-Verlag. January 2004: 215–235 [2–4]. ISBN 978-3-642-62208-3. doi:10.1007/978-3-642-18631-8_9. (原始內容 (PDF)存檔於2006-05-01) (德語). (21 [24] pages)
- ^ Rojas, Raúl; Hashagen, Ulf. The First Computers: History and Architectures. MIT Press. 2002: 292 [2013-10-25]. ISBN 978-0-26268137-7.
- ^ Zenil, Héctor (編). A Computable Universe: Understanding and Exploring Nature As Computation - with a Foreword by Sir Roger Penrose. Singapore: World Scientific Publishing Company. 2012: 791.
- ^ Giloi, Wolfgang K., Konrad Zuses Plankalkül als Vorläufer moderner Programmiermodelle, November 1990 (德語)
- ^ 5.0 5.1 Hellige, Hans Dieter (編). 寫於Bremen, Germany. Geschichten der Informatik. Visionen, Paradigmen, Leitmotive 1. Berlin / Heidelberg, Germany: Springer-Verlag. January 2004: 45, 56, 89, 104–105, 113, 152, 216–217. ISBN 978-3-540-00217-8. doi:10.1007/978-3-642-18631-8. ISBN 3-540-00217-0 (德語). (xii+514 pages)
- ^ 6.00 6.01 6.02 6.03 6.04 6.05 6.06 6.07 6.08 6.09 6.10 6.11 6.12 6.13 6.14 6.15 6.16 6.17 Bauer, Friedrich L.; Wössner, Hans. The "Plankalkül" of Konrad Zuse: A Forerunner of Today's Programming Languages (PDF). Communications of the ACM. 1972, 15 (7): 678–685. S2CID 17681101. doi:10.1145/361454.361515. (原始內容 (PDF)存檔於2009-02-20) (英語). (HTML)
- ^ Zuse, Konrad. Rojas, Raúl; Wagner, G.; Scharf, Ludmila; Schöttker-Söhl [Schötke-Suhl], Susanne , 編. Der Plankalkül (In der Fassung von 1945) (Manuscript). Konrad Zuse Internet Archive. 1946: 10, 45 [2023-11-01]. ZIA ID: 0233. (原始內容存檔 (PDF)於2015-04-16) (德語). (1+1+180 pages)
- ^ 8.0 8.1 8.2 Knuth, Donald Ervin; Pardo, Luis Isidoro Trabb. The Early Development of Programming Languages (PDF). Stanford University, Computer Science Department: 8, 9, 14, 15. August 1976 [2017-12-28]. (原始內容 (PDF)存檔於2017-09-12).
- ^ Rojas, Raúl. Plankalkül (PDF). Encyclopedia of computers and computer history. Chicago / London: Fitzroy Dearborn Publishers: 634. 2001 [26 May 2023]. ISBN 1-57958235-4.
延伸閱讀
編輯- Zuse, Konrad. Ansätze einer Theorie des allgemeinen Rechnens unter besonderer Berücksichtigung des Aussagenkalküls und dessen Anwendung auf Relaisschaltungen [Inception of a universal theory of computation with special consideration of the propositional calculus and its application to relay circuits] (unpublished manuscript). 1943. Zuse Papers 045/018 (德語).
- Zuse, Konrad. 寫於Hopferau bei Füssen, Germany. Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben. Archiv der Mathematik (Karlsruhe / Stuttgart / Basel, Germany: Birkhäuser Verlag). 1948-12-06, 1 (6): 441–449. ISSN 0003-889X. doi:10.1007/BF02038459. eISSN 1420-8938 (德語). (9 pages)
- Rojas, Raúl; Göktekin, Cüneyt; Friedland, Gerald; Krüger, Mike; Kuniß, Denis; Langmack, Olaf. Plankalkül: The First High-Level Programming Language and its Implementation (PDF). Berlin, Germany: Institut für Informatik, Freie Universität Berlin & Feinarbeit.de. February 2000. Technical Report B-3/2000. (原始內容存檔於2006-05-01) (英語).[1] (22 pages)
- Bruines, Bram. Plankalkül (PDF) (Thesis). 2010-01-08 [2023-11-02]. (原始內容存檔 (PDF)於2023-11-02). (24 pages)
外部連結
編輯- Plankalkül-Programme. Konrad Zuse Internet Archive. 2014-08-21 [2017-10-04]. (原始內容存檔於2014-08-21) (德語及英語). (NB. Plankalkül Java applets and documents.)