Plankalkül德語發音:[ˈplaːnkalkyːl])是康拉德·楚澤在1942至1945年間,出於工程目的而設計的一種程式語言。它是第一種為計算機設計的高級程式語言

Plankalkül
編程範型過程式
設計者Konrad Zuse
釋出時間1948年,​76年前​(1948 – 概念首次發表
主要實作產品
Plankalkül-Compiler(柏林自由大學於2000年實現[1]
影響語言
Superplan英語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]

  • 只有局部變量,
  • 函數不支持遞歸,
  • 只支持傳名調用
  • 合成類型是陣列和元組,
  • 包含條件表達式,
  • 包含for循環和while循環,
  • 沒有goto

數據類型

編輯

在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英語Heinz Rutishauser的影響下開始使用 [6]。Knuth和Pardo相信Zuse總是寫為 ,而 是»Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben«的出版商在1948年介入的[8]。在ZürichALGOL 58會議中,歐洲與會者提議使用Zuse介入的賦值符號,而美國代表團堅持採用:=[6]

存儲賦值結果的變量(左值)被寫在賦值算子的右側[8]。對這個變量的第一次賦值被認為是一個聲明[6]

賦值算子的左側被用作表達式(德語:Ausdruck),它定義哪個值將被賦值到這個變量。表達式可以使用算術算子、布爾算子和比較算子(   等等)[6]

控制流程

編輯

布爾值被表示為整數,「否」( )為 ,而「是」( )為 。條件控制流程採用守衛語句 的形式,這裏的加點箭頭叫做「條件符號」(德語:Bedingt-Zeichen),它指示在 為「是」的條件下執行塊 。迭代算子具有如下形式:

 

這裏的 表示「重複規劃」(德語:Wiederholungsplan),它重複直到所有守衛成為「否」[9]

術語

編輯

Zuse稱呼一個單一的程序為「計算規劃」(德語:Rechenplan)。他設想其所稱謂的「規劃組裝設備」(德語:Planfertigungsgerät),能自動的將一個程序的數學公式轉換成機器可讀的打孔電影膠片,這是在今天稱為翻譯器編譯器的某種東西[5]

例子

編輯

下面的例子程序計算整數的階乘

 

這裏的Zuse定義的用戶類型 表示全部整數。第一行包含「邊界概要」(德語:Randauszug),它定義程序 接受一個變元(實際參數),即叫做 的一個整數,並返回叫做 的一個整數。這個程序將 賦值到 ,將 賦值到 。接着迭代算子 執行重複運算,將從 遞減至 的值,依次賦值到局部變量 ,這裏將大於  值累乘至 。當重複結束之時,值 就包含了變元的階乘。

Zuse還定義了用戶類型 表示自然數, 表示非負整數, 表示非負分數, 表示全部分數, 表示複數。迭代算子   接受一個非負整數  只重複 次而不賦值局部變量, 重複時將從 遞增至 的值賦值給局部變量 ;迭代算子   接受兩個非負整數 並賦值到局部變量   時從 遞增至   時從 遞減至   時從 遞增至 而在 時從 遞減至 。使用 ,可以省略 的初始值設置,和 的守衛條件判斷。

引用

編輯
  1. ^ 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)
  2. ^ Rojas, Raúl; Hashagen, Ulf. The First Computers: History and Architectures. MIT Press. 2002: 292 [2013-10-25]. ISBN 978-0-26268137-7. 
  3. ^ 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. 
  4. ^ Giloi, Wolfgang K., Konrad Zuses Plankalkül als Vorläufer moderner Programmiermodelle, November 1990 (德語) 
  5. ^ 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. ^ 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)
  7. ^ 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. ^ 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). 
  9. ^ 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.)