Plankalkül

Plankalkül（ˈplaːnkalkyːl）是康拉德·楚澤在1942至1945年間，出於工程目的而設計的一種編程語言。它是第一種為計算機設計的高級編程語言。
“Kalkül”在德語中意為形式系統。如希爾伯特演繹系統原本名為“Hilbert-Kalkül”那樣，“Plankalkül”指用於規劃（planning）的形式系統。

**描述**
Plankalkül可比較於APL和關係代數。它包括賦值語句、子例程、條件語句、迭代、浮點算術、陣列、層級記錄結構、斷言、例外處理和其他高級特徵比如目標導向執行。Plankalkül提供了叫做“廣義圖”（verallgemeinerter Graph）的數據結構，它可以被用來表示幾何結構。
Plankalkül的很多特徵重現於後來的編程語言之中；一個例外是其特質性的使用佔據多行的表示法。
Plankalkül的一些特徵：- 只有局部變量，- 函數不支持遞歸，- 只支持傳名調用，- 合成類型是陣列和元組，- 包含條件表達式，- 包含for循環和while循環，- 沒有goto。

**數據類型**
在Plankalkül中唯一的原始數據類型是單一的“是否值”（Ja-Nein-Werte）即布爾值。它被指稱為標識符 。所有進一步的數據類型都是合成的，並且從原始類型通過“陣列”和“記錄”的方式建造而成。
所以8位序列（這在現代計算中被當作字節）被指稱為，而大小為 乘的布爾陣列，被描述為。還存在更短的表示法，可以將替代為，它叫做“n位是否值序列”（n-stellige Folge von Ja-Nein-Werten）。
類型有兩個可能的值和。所以4位序列可以寫為例如，但是在這樣的一個序列表示一個數的情況下，編程者可以使用十進制表示法的。
Zuse還定義了為（或寫為）即有序對（Angabenpaar）；為即列表（Liste），在元素數量不定時寫為；為即有序對列表（Paarliste），在元素數量不定時寫為。兩個組件（component，Glieder）和的結構（Struktur）被寫為。
Plankalkül中類型（Art）構成自3個元素：結構（Struktur），語用意義（Typ），和可能的限制（Beschränkung）。用戶定義的類型被標示為字母連帶編號，比如，即第一個用戶定義的類型。

**例子**
Zuse使用了來自象棋理論的很多例子：

**標識符**
標識符（Bezeichnungen）是字母字符連帶編號。針對變量有如下標識符種類：
*輸入值（Eingabewerte, Variablen），標記以字母。
*中間值，臨時值（Zwischenwerte），標記以字母。
*常值（Constanten），標記以字母。
*輸出值（Resultatwerte），標記以字母。
特定的某種變量由寫在種類之下的編號來標示，例如：，，等等。
程序和子例程都被表達為過程（Rechenpläne），它被標記以字母，跟隨著一個程序編號（Nummer），或者以點號分隔的程序組編號與程序編號。例如：、。
子例程的輸出值保存在變量中，其他子例程能在標識符之下獲得到它，而讀取這個變量的值還意味著調用有關的子例程。

**按索引訪問元素**
Plankalkül允許使用組件（component）索引（Komponenten-Index）訪問變量的單獨元素。例如，當一個程序接收輸入於具有類型（遊戲狀態）的變量之中，那麼給出棋盤狀態，給出在編號方格中的棋子，而給出這個棋子的位編號。
在現代編程語言中，這可以用描述為表示法類似於V00、V00i、V00ij（儘管訪問單一的位在現代編程語言中典型的使用位掩碼）。

**語法**
由於變量的索引是垂直書寫的，邏輯上一行的Plankalkül指令要求佔據4或3物理行來書寫。
一行包含變量種類，第二行標記以（Variablen-Index）包含變量編號，第三行標記以（Komponenten-Index）包含組件索引，而第四行標記以（Struktur-Index）是類型描述。類型不是必需的，但是Zuse註釋到這能幫助閱讀和理解程序。
在行中類型前綴可以去掉，例如：
，可以簡寫為。
進一步的類型前綴也可以去掉，例如：
，可以簡寫為。同義於。
變量的索引的例子：
索引可以不只是常值。變量可以被用作其他變量的索引，而這被標記為折線，它展示變量的值將在哪個組件索引中使用：

**賦值運算**
Zuse在他的演算中介入了賦值算子，這個概念未知於他之前的數學中。他將其標記為，並稱其為產生符號（Ergibt-Zeichen）。使用賦值的概念是在數學和計算機科學之間的關鍵差異。
例如下列表達式：
有人宣稱Konrad Zuse最初使用圖元25px作為賦值的符號，並在Heinz Rutishauser的影響下開始使用。Knuth和Pardo相信Zuse總是寫為，而25px是»Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben«的出版商在1948年介入的。在Zürich的ALGOL 58會議中，歐洲與會者提議使用Zuse介入的賦值符號，而美國代表團堅持採用:=。
存儲賦值結果的變量（左值）被寫在賦值算子的右側。對一個變量的第一次賦值被認為是對它的初始化聲明。
賦值算子的左側被用作表達式（Ausdrücke），它定義哪個值將被賦值到這個變量。表達式可以使用算術算子、布爾算子和比較算子（，，等等）。

**控制流程**
布爾值被表示為整數，“否”（）為，而“是”（）為。條件控制流程採用守衛語句的形式，這裡的加點箭頭叫做“條件符號”（Bedingt-Zeichen），它指示在為“是”的條件下執行塊。迭代算子具有如下形式：

這裡的表示“重複規劃”（Wiederholungsplan），它重複直到所有守衛成為“否”。
算子和意圖用在迭代運算之中，對變量進行遞增索引的遍歷，而對其進行遞減索引的遍歷，找出其符合特定條件的下一個（含第一個）元素。典型用法是將在局部變量中的符合條件元素賦值到中間變量之中，然後在用豎槓分隔出的後續語句之中，在前面語句成功找到符合條件的元素之時對此中間變量做進一步處理。

**術語**
Zuse稱呼一個單一的程序為“計算規劃”（Rechenplan）。他設想其所稱謂的“規劃組裝設備”（Planfertigungsgerät），能自動的將一個程序的數學公式轉換成機器可讀的打孔電影膠片，這是在今天稱為翻譯器或編譯器的某種東西。

**例子**
下面的例子程序計算整數的階乘：
這裡的Zuse定義的用戶類型表示全部整數。第一行包含“邊界概要”（Randauszug），它定義程序接受一個變元（實際參數），即叫做的一個整數，並返回叫做的一個整數。這個程序將賦值到，將賦值到。接著迭代算子執行重複運算，將從遞減至的值，依次賦值到局部變量，這裡將大於的值累乘至。當重複結束之時，值就包含了變元的階乘。
Zuse還定義了用戶類型表示自然數，表示非負整數，表示非負分數，表示全部分數，表示複數。迭代算子、和接受一個非負整數，只重複次而不賦值局部變量，重複時將從遞增至的值賦值給局部變量；迭代算子、和接受兩個非負整數並賦值到局部變量，在時從遞增至，在時從遞減至，在時從遞增至而在時從遞減至。使用，可以省略的初始值設置，和的守衛條件判斷。

**引用**

**延伸閱讀**
 id=Zuse Papers 045/018- cite journal |title=Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben |language=de |trans-title= |author-last=Zuse |author-first=Konrad |author-link=Konrad Zuse |date=1948-12-06 |journal=Archiv der Mathematik |issn=0003-889X |eissn=1420-8938 |location=Hopferau bei Füssen, Germany |publisher=Birkhäuser Verlag |publication-place=Karlsruhe / Stuttgart / Basel, Germany |volume=1 |issue=6 |doi=10.1007/BF02038459 |pages=441–449 (9 pages)- archive-date=2006-05-01 (22 pages)- archive-date=2023-11-02 (24 pages)

**外部鏈接**
 archive-date=2014-08-21 (NB. Plankalkül Java applets and documents.)