Plankalkül (德語發音: [ˈplaːnkalkyːl] )是康拉德·楚澤 在1942至1945年間,出於工程目的而設計的一種編程語言 。它是第一種為計算機設計的高級編程語言 。
「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 )即布爾 值。它被指稱為標識符
S
0
{\displaystyle S0}
。所有進一步的數據類型都是合成的,並且從原始類型通過「陣列」和「記錄」的方式建造而成[ 6] 。
所以8位序列(這在現代計算中被當作字節 )被指稱為
8
×
S
0
{\displaystyle 8\times S0}
,而大小為
m
{\displaystyle m}
乘
n
{\displaystyle n}
的布爾陣列,被描述為
m
×
n
×
S
0
{\displaystyle m\times n\times S0}
。還存在更短的表示法,可以將
n
×
S
0
{\displaystyle n\times S0}
替代為
S
1
⋅
n
{\displaystyle S1\cdot n}
,它叫做「n位 是否值序列」(德語:n-stellige Folge von Ja-Nein-Werten )[ 6] 。
類型
S
0
{\displaystyle S0}
有兩個可能的值
0
{\displaystyle 0}
和
L
{\displaystyle L}
。所以4位序列可以寫為例如
L
00
L
{\displaystyle L00L}
,但是在這樣的一個序列表示一個數的情況下,編程者可以使用十進制表示法的
9
{\displaystyle 9}
[ 6] 。
Zuse還定義了
S
2
{\displaystyle S2}
為
2
×
σ
{\displaystyle 2\times \sigma }
(或寫為
2
σ
{\displaystyle 2\sigma }
)即有序對 (德語:Angabenpaar );
S
3
{\displaystyle S3}
為
m
×
σ
{\displaystyle m\times \sigma }
即列表 (德語:Liste ),在元素數量不定時寫為
◻
×
σ
{\displaystyle \Box \times \sigma }
;
S
4
{\displaystyle S4}
為
m
×
2
σ
{\displaystyle m\times 2\sigma }
即有序對列表(德語:Paarliste ),在元素數量不定時寫為
◻
×
2
σ
{\displaystyle \Box \times 2\sigma }
。兩個組件(component,德語:Glieder )
σ
{\displaystyle \sigma }
和
τ
{\displaystyle \tau }
的結構 (德語:Struktur )被寫為
(
σ
,
τ
)
{\displaystyle (\sigma ,\tau )}
[ 6] 。
Plankalkül中類型(德語:Art )構成自3個元素:結構(德語:Struktur ),語用意義(德語:Typ ),和可能的限制(德語:Beschränkung )[ 6] 。用戶定義的類型被標示為字母
A
{\displaystyle A}
連帶編號,比如
A
1
{\displaystyle A1}
,即第一個用戶定義的類型。
Zuse使用了來自象棋理論的很多例子[ 6] :
A
1
{\displaystyle A1}
S
1
⋅
3
{\displaystyle S1\cdot 3}
棋盤的坐標(它的大小為
8
×
8
{\displaystyle 8\times 8}
所以
3
{\displaystyle 3}
位就足夠了)。
A
2
{\displaystyle A2}
2
×
A
1
{\displaystyle 2\times A1}
棋盤的方格(例如
L
00
,
00
L
{\displaystyle L00,00L}
指稱代數記譜法 中的e2)。
A
3
{\displaystyle A3}
S
1
⋅
4
{\displaystyle S1\cdot 4}
棋子(例如
00
L
0
{\displaystyle 00L0}
指稱白王 )。
A
4
{\displaystyle A4}
(
A
2
,
A
3
)
{\displaystyle (A2,A3)}
棋盤上的棋子(例如
L
00
,
00
L
;
00
L
0
{\displaystyle L00,00L;00L0}
指稱白王 在e2中)。
A
5
{\displaystyle A5}
64
×
A
3
{\displaystyle 64\times A3}
棋盤(棋子位置,描述64的方格都包含哪個棋子)。
A
10
{\displaystyle A10}
(
A
5
,
S
0
,
S
1
⋅
4
,
A
2
)
{\displaystyle (A5,S0,S1\cdot 4,A2)}
遊戲狀態(
A
5
{\displaystyle A5}
指稱棋盤,
S
0
{\displaystyle S0}
指稱行棋玩家,
S
1
⋅
4
{\displaystyle S1\cdot 4}
指稱王車易位 的可能性(
2
{\displaystyle 2}
位給白棋
2
{\displaystyle 2}
位給黒棋),
A
2
{\displaystyle A2}
指稱關於哪個單元格有可能吃過路兵 )。
標識符(德語:Bezeichnungen )是字母字符連帶編號[ 6] 。針對變量有如下標識符種類[ 7] :
輸入值(德語:Eingabewerte, Variablen ),標記以字母
V
{\displaystyle V}
。
中間值,臨時值(德語:Zwischenwerte ),標記以字母
Z
{\displaystyle Z}
。
常值(德語:Constanten ),標記以字母
C
{\displaystyle C}
。
輸出值(德語:Resultatwerte ),標記以字母
R
{\displaystyle R}
。
特定的某種變量由寫在種類之下的編號來標示[ 6] ,例如:
V
0
{\displaystyle {\begin{smallmatrix}V\\0\end{smallmatrix}}}
,
Z
2
{\displaystyle {\begin{smallmatrix}Z\\2\end{smallmatrix}}}
,
C
31
{\displaystyle {\begin{smallmatrix}C\\31\end{smallmatrix}}}
等等。
程序和子例程都被表達為過程 (德語:Rechenpläne ),它被標記以字母
P
{\displaystyle P}
,跟隨着一個程序編號(德語:Nummer ),或者以點號分隔的程序組編號與程序編號。例如:
P
12
{\displaystyle P12}
、
P
3
⋅
7
{\displaystyle P3\cdot 7}
[ 6] 。
子例程
P
17
{\displaystyle P17}
的輸出值保存在變量
R
0
{\displaystyle {\begin{smallmatrix}R\\0\end{smallmatrix}}}
中,其他子例程能在標識符
R
17
0
{\displaystyle {\begin{smallmatrix}R17\\0\end{smallmatrix}}}
之下獲得到它,而讀取這個變量的值還意味着調用有關的子例程[ 6] 。
Plankalkül允許使用組件(component)索引(德語:Komponenten-Index )訪問變量的單獨元素。例如,當一個程序接收輸入於具有類型
A
10
{\displaystyle A10}
(遊戲狀態)的變量
V
0
{\displaystyle {\begin{smallmatrix}V\\0\end{smallmatrix}}}
之中,那麼
V
0
0
{\displaystyle {\begin{smallmatrix}V\\0\\0\end{smallmatrix}}}
給出棋盤狀態,
V
0
0
⋅
i
{\displaystyle {\begin{smallmatrix}V\\0\\0\cdot i\end{smallmatrix}}}
給出在編號
i
{\displaystyle i}
方格中的棋子,而
V
0
0
⋅
i
⋅
j
{\displaystyle {\begin{smallmatrix}V\\0\\0\cdot i\cdot j\end{smallmatrix}}}
給出這個棋子的位編號
j
{\displaystyle j}
[ 6] 。
在現代編程語言中,這可以用描述為表示法類似於V0[0]
、V0[0][i]
、V0[0][i][j]
(儘管訪問單一的位在現代編程語言中典型的使用位掩碼 )。
由於變量的索引是垂直書寫的,邏輯上一行的Plankalkül指令要求占據4或3物理行來書寫。
一行包含變量種類,第二行標記以
V
{\displaystyle V}
(德語:Variablen-Index )包含變量編號,第三行標記以
K
{\displaystyle K}
(德語:Komponenten-Index )包含組件索引,而第四行標記以
S
{\displaystyle S}
(德語:Struktur-Index )是類型描述。類型不是必需的,但是Zuse注釋到這能幫助閱讀和理解程序[ 6] 。
在
S
{\displaystyle S}
行中類型
S
{\displaystyle S}
前綴可以去掉,例如[ 6] :
S
|
S
1
⋅
n
m
×
S
1
⋅
n
S
0
S
1
σ
{\displaystyle S\;\left|\;S1\cdot n\quad m\times S1\cdot n\quad S0\quad S1\quad \sigma \right.}
,可以簡寫為
S
|
1
⋅
n
m
×
1
⋅
n
0
1
σ
{\displaystyle \ S\;\left|\;1\cdot n\quad m\times 1\cdot n\quad 0\quad 1\quad \sigma \right.}
。
進一步的類型
A
{\displaystyle A}
前綴也可以去掉,例如:
S
|
A
1
A
2
S
0
A
3
σ
{\displaystyle S\;\left|\;A1\quad A2\quad S0\quad A3\ \quad \sigma \right.}
,可以簡寫為
A
|
1
2
0
3
σ
{\displaystyle \ A\;\left|\;1\quad 2\quad 0\quad 3\ \quad \sigma \right.}
。
A
0
{\displaystyle A0}
同義於
S
0
{\displaystyle S0}
。
變量的索引的例子:
V
V
3
K
S
m
×
2
×
1
⋅
n
{\displaystyle {\begin{array}{r|l}&V\\V&3\\K&\\S&m\times 2\times 1\cdot n\end{array}}}
變量
V
3
{\displaystyle {\begin{smallmatrix}V\\3\end{smallmatrix}}}
,它是
m
{\displaystyle m}
個有序對的類型
S
1
⋅
n
{\displaystyle S1\cdot n}
的值的列表。
V
V
3
S
m
×
2
×
1
⋅
n
{\displaystyle {\begin{array}{r|l}&V\\V&3\\S&m\times 2\times 1\cdot n\end{array}}}
K
{\displaystyle K}
行在其為空時可以越過。因此這個表達式含義同於前者。
V
V
3
K
i
⋅
0
⋅
7
S
0
{\displaystyle {\begin{array}{r|l}&V\\V&3\\K&i\cdot 0\cdot 7\\S&0\end{array}}}
變量
V
3
{\displaystyle {\begin{smallmatrix}V\\3\end{smallmatrix}}}
的第
i
+
1
{\displaystyle i+1}
個有序對的第
1
{\displaystyle 1}
(索引
0
{\displaystyle 0}
)組件的第
8
{\displaystyle 8}
(索引
7
{\displaystyle 7}
)位,它擁有布爾類型
S
0
{\displaystyle S0}
。
索引可以不只是常值。變量可以被用作其他變量的索引,而這被標記為折線,它展示變量的值將在哪個組件索引中使用:
變量
V
3
{\displaystyle {\begin{smallmatrix}V\\3\end{smallmatrix}}}
的第
Z
5
{\displaystyle {\begin{smallmatrix}Z\\5\end{smallmatrix}}}
個元素。等價於在很多現代語言中的表達式V3[Z5]
[ 6] 。
Zuse在他的演算中介入了賦值算子,這個概念未知於他之前的數學中。他將其標記為
⇒
{\displaystyle \Rightarrow }
,並稱其為產生符號(德語:Ergibt-Zeichen )。使用賦值的概念是在數學和計算機科學之間的關鍵差異[ 8] 。
例如下列表達式:
Z
+
1
⇒
Z
V
1
1
S
1
⋅
n
1
⋅
n
1
⋅
n
{\displaystyle {\begin{array}{r|lll}&Z&+&1&\Rightarrow &Z\\V&1&&&&1\\S&1\cdot n&&1\cdot n&&1\cdot n\\\end{array}}}
向整數中間值
Z
1
{\displaystyle {\begin{smallmatrix}Z\\1\end{smallmatrix}}}
增加數量
1
{\displaystyle 1}
。
(
V
,
V
)
⇒
R
V
0
1
0
S
σ
σ
2
σ
{\displaystyle {\begin{array}{r|lll}&(V&,&V)&\Rightarrow &R\\V&\;\,0&&1&&0\\S&\;\,\sigma &&\sigma &&2\sigma \\\end{array}}}
將值
V
0
{\displaystyle {\begin{smallmatrix}V\\0\end{smallmatrix}}}
和
V
1
{\displaystyle {\begin{smallmatrix}V\\1\end{smallmatrix}}}
合成為
R
0
{\displaystyle {\begin{smallmatrix}R\\0\end{smallmatrix}}}
所指稱的合成值。
有人宣稱Konrad Zuse最初使用圖元 作為賦值的符號,並在Heinz Rutishauser 的影響下開始使用
⇒
{\displaystyle \Rightarrow }
[ 6] 。Knuth 和Pardo相信Zuse總是寫為
⇒
{\displaystyle \Rightarrow }
,而 是»Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben«的出版商在1948年介入的[ 8] 。在Zürich 的ALGOL 58 會議中,歐洲與會者提議使用Zuse介入的賦值符號,而美國代表團堅持採用:=
[ 6] 。
存儲賦值結果的變量(左值 )被寫在賦值算子的右側[ 8] 。對一個變量的第一次賦值被認為是對它的初始化聲明[ 6] 。
賦值算子的左側被用作表達式(德語:Ausdrücke ),它定義哪個值將被賦值到這個變量。表達式可以使用算術算子、布爾算子和比較算子(
=
{\displaystyle =}
,
≠
{\displaystyle \neq }
,
≤
{\displaystyle \leq }
等等)[ 6] 。
布爾值被表示為整數,「否」(
n
e
i
n
{\displaystyle \mathrm {nein} }
)為
0
{\displaystyle 0}
,而「是」(
j
a
{\displaystyle \mathrm {ja} }
)為
1
{\displaystyle 1}
。條件控制流程採用守衛語句
A
→
˙
X
{\displaystyle \,{\mathcal {A}}{\dot {\rightarrow }}{\mathcal {X}}\,}
的形式,這裡的加點箭頭叫做「條件符號」(德語:Bedingt-Zeichen ),它指示在
A
{\displaystyle {\mathcal {A}}}
為「是」的條件下執行塊
X
{\displaystyle {\mathcal {X}}}
。迭代算子具有如下形式:
W
[
A
→
˙
X
B
→
˙
Y
⋮
]
{\displaystyle {\begin{matrix}W\\\\\\\end{matrix}}{\begin{bmatrix}{\mathcal {A}}{\dot {\rightarrow }}{\mathcal {X}}\\{\mathcal {B}}{\dot {\rightarrow }}{\mathcal {Y}}\\\vdots \end{bmatrix}}}
這裡的
W
{\displaystyle W}
表示「重複規劃」(德語:Wiederholungsplan ),它重複直到所有守衛成為「否」[ 9] 。
算子
μ
x
(
x
∈
l
∧
R
(
x
)
)
{\displaystyle \mu x(x\in l\land R(x))}
和
λ
x
(
x
∈
l
∧
R
(
x
)
)
{\displaystyle \lambda x(x\in l\land R(x))}
意圖用在迭代運算之中,
μ
x
{\displaystyle \mu x}
對變量
l
{\displaystyle l}
進行遞增索引的遍歷,而
λ
x
{\displaystyle \lambda x}
對其進行遞減索引的遍歷,找出其符合特定條件
R
(
)
{\displaystyle R()}
的下一個(含第一個)元素
x
{\displaystyle x}
。典型用法是將在局部變量
x
{\displaystyle x}
中的符合條件元素賦值到中間變量之中,然後在用豎槓
|
{\displaystyle \left|\right.}
分隔出的後續語句之中,在前面語句成功找到符合條件的元素之時對此中間變量做進一步處理。
Zuse稱呼一個單一的程序為「計算規劃」(德語:Rechenplan )。他設想其所稱謂的「規劃組裝設備」(德語:Planfertigungsgerät ),能自動的將一個程序的數學公式轉換成機器可讀的打孔 電影膠片 ,這是在今天稱為翻譯器 或編譯器 的某種東西[ 5] 。
下面的例子程序計算整數的階乘 :
P
1.1
V
K
A
|
R
(
V
)
⇒
R
0
0
10
10
V
K
A
|
1
⇒
R
0
10
10
|
V
+
1
⇒
Z
0
0
10
10
10
V
K
A
|
W
2
(
Z
)
0
10
[
i
>
0
→
˙
10
10
[
R
×
i
⇒
R
0
0
10
10
10
]
]
{\displaystyle {\begin{aligned}&\quad P1.1\\&\;\,{\begin{array}{r}\\V\\K\\A\\\end{array}}\left|\;{\begin{array}{lll}R(V)&\Rightarrow &R\\\,\quad 0&&0\\&&\\\quad 10&&10\\\end{array}}\right.\\&\;\,{\begin{array}{r}\\V\\K\\A\\\end{array}}\left|\;{\begin{array}{lll}1&\Rightarrow &R\\&&0\\&&\\10&&10\\\end{array}}\right.\left|\;{\begin{array}{lll}V+1&\Rightarrow &Z\\0&&0\\&&\\10\;\;\;10&&10\\\end{array}}\right.\\&\;\,{\begin{array}{r}\\V\\K\\A\\\end{array}}\left|\;{\begin{array}{l}W2(Z)\\\quad \quad 0\\\\\quad \quad 10\end{array}}\left[{\begin{array}{l}i>0&{\dot {\rightarrow }}\\\\\\10\;\;10&\\\end{array}}\left[{\begin{array}{lll}R\times i&\Rightarrow &R\\0&&0\\&&\\10\;\;\;10&&10\end{array}}\right]\right]\right.\end{aligned}}}
這裡的Zuse定義的用戶類型
A
10
{\displaystyle A10}
表示全部整數。第一行包含「邊界概要」(德語:Randauszug ),它定義程序
P
1.1
{\displaystyle P1.1}
接受一個變元(實際參數),即叫做
V
0
{\displaystyle {\begin{smallmatrix}V\\0\end{smallmatrix}}}
的一個整數,並返回叫做
R
0
{\displaystyle {\begin{smallmatrix}R\\0\end{smallmatrix}}}
的一個整數。這個程序將
1
{\displaystyle 1}
賦值到
R
0
{\displaystyle {\begin{smallmatrix}R\\0\end{smallmatrix}}}
,將
V
0
+
1
{\displaystyle {\begin{smallmatrix}V\\0\end{smallmatrix}}+1}
賦值到
Z
0
{\displaystyle {\begin{smallmatrix}Z\\0\end{smallmatrix}}}
。接着迭代算子
W
2
{\displaystyle W2}
執行重複運算,將從
Z
0
−
1
{\displaystyle {\begin{smallmatrix}Z\\0\end{smallmatrix}}-1}
遞減至
0
{\displaystyle 0}
的值,依次賦值到局部變量
i
{\displaystyle i}
,這裡將大於
0
{\displaystyle 0}
的
i
{\displaystyle i}
值累乘至
R
0
{\displaystyle {\begin{smallmatrix}R\\0\end{smallmatrix}}}
。當重複結束之時,值
R
0
{\displaystyle {\begin{smallmatrix}R\\0\end{smallmatrix}}}
就包含了變元的階乘。
Zuse還定義了用戶類型
A
8
{\displaystyle A8}
表示自然數,
A
9
{\displaystyle A9}
表示非負整數,
A
11
{\displaystyle A11}
表示非負分數,
A
12
{\displaystyle A12}
表示全部分數,
A
13
{\displaystyle A13}
表示複數。迭代算子
W
0
{\displaystyle W0}
、
W
1
{\displaystyle W1}
和
W
2
{\displaystyle W2}
接受一個非負整數
n
{\displaystyle n}
,
W
0
{\displaystyle W0}
只重複
n
{\displaystyle n}
次而不賦值局部變量,
W
1
{\displaystyle W1}
重複時將從
0
{\displaystyle 0}
遞增至
n
−
1
{\displaystyle n-1}
的值賦值給局部變量
i
{\displaystyle i}
;迭代算子
W
3
{\displaystyle W3}
、
W
4
{\displaystyle W4}
和
W
5
{\displaystyle W5}
接受兩個非負整數
(
n
,
m
)
{\displaystyle (n,m)}
並賦值到局部變量
i
{\displaystyle i}
,
W
3
{\displaystyle W3}
在
n
<
m
{\displaystyle n<m}
時從
n
{\displaystyle n}
遞增至
m
−
1
{\displaystyle m-1}
,
W
4
{\displaystyle W4}
在
n
>
m
{\displaystyle n>m}
時從
n
{\displaystyle n}
遞減至
m
+
1
{\displaystyle m+1}
,
W
5
{\displaystyle W5}
在
n
<
m
{\displaystyle n<m}
時從
n
{\displaystyle n}
遞增至
m
−
1
{\displaystyle m-1}
而在
n
>
m
{\displaystyle n>m}
時從
n
{\displaystyle n}
遞減至
m
+
1
{\displaystyle m+1}
。使用
W
4
(
V
0
,
0
)
{\displaystyle W4({\begin{smallmatrix}V\\0\end{smallmatrix}},0)}
,可以省略
V
0
+
1
{\displaystyle {\begin{smallmatrix}V\\0\end{smallmatrix}}+1}
的初始值設置,和
i
>
0
{\displaystyle i>0}
的守衛條件判斷。
^ 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.)