Plankalkül (German pronunciation: [ˈplaːnkalkyːl]) is a programming language designed for engineering purposes by Konrad Zuse between 1942 and 1945.
[2] In the domain of creating computing machines, Zuse was self-taught, and developed them without knowledge about other mechanical computing machines that existed already – although later on (building the Z3) being inspired by Hilbert's and Ackermann's book on elementary mathematical logic (see Principles of Mathematical Logic).
[3]: 113, 152, 216 To describe logical circuits, Zuse invented his own diagram and notation system, which he called "combinatorics of conditionals" (German: Bedingungskombinatorik).
[4]: 3 What Zuse had in mind, however, needed to be much more powerful (propositional calculus is not Turing-complete and is not able to describe even simple arithmetic calculations[5]).
[3]: 113, 152, 216 He wrote the following in his notebook: Seit etwa einem halben Jahr allmähliches Einführen in die formale Logik.
Viele meiner früheren Gedanken habe ich dort wiedergefunden.
(Bedingungskombinatorik = Aussagenlogik; Lehre von den Intervallen = Gebietenkalkül).
Hierzu sind eine Reihe von Begriffen zu klären.
(combinatorics of conditionals = propositional calculus; study of intervals = lattice theory).
While working on his doctoral dissertation, Zuse developed the first known formal system of algorithm notation[6]: 9 capable of handling branches and loops.
[4]: 3 Although most of his computers were destroyed by Allied bombs, Zuse was able to rescue one machine, the Z4, and move it to the Alpine village of Hinterstein[6]: 8 (part of Bad Hindelang).
His notation was quite general, but the proposal never attained the consideration it deserved.Unable to continue building computers – which was also forbidden by the Allied Powers[10] – Zuse devoted his time to the development of a higher-level programming model and language.
[7]: 18 In 1948, he published a paper in the Archiv der Mathematik and presented at the Annual Meeting of the GAMM.
[citation needed] In a 1957 lecture, Zuse expressed his hope that Plankalkül, "after some time as a Sleeping Beauty, will yet come to life.
"[4]: 3 He expressed disappointment that the designers of ALGOL 58 never acknowledged the influence of Plankalkül on their own work.
[4]: 2 Plankalkül has drawn comparisons to the language APL, and to relational algebra.
It includes assignment statements, subroutines, conditional statements, iteration, floating-point arithmetic, arrays, hierarchical record structures, assertions, exception handling, and other advanced features such as goal-directed execution.
[14] Many features of the Plankalkül reappear in later programming languages; an exception is its idiosyncratic two-dimensional notation using multiple lines.
All the further data types are composite, and build up from primitive by means of "arrays" and "records".
[15]: 679 So, a sequence of eight bits (which in modern computing could be regarded as byte) is denoted by
Zuse used a lot of examples from chess theory:[15]: 680 Identifiers are alphanumeric characters with a number.
, and reading value of that variable also means executing related subprogram.
[15]: 680 Plankalkül allows access for separate elements of variable by using "component index" (German: Komponenten-Index).
Because indexes of variables are written vertically, each Plankalkül instruction requires multiple rows to write down.
Type is not required, but Zuse notes that this helps with reading and understanding the program.
, and that was introduced by publishers of «Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben» in 1948.
[6]: 14 In the ALGOL 58 conference in Zürich, European participants proposed to use the assignment character introduced by Zuse, but the American delegation insisted on :=.
Conditional control flow took the form of a guarded statement A -> B, which executed the block B if A was true.
He envisioned what he called a Planfertigungsgerät ("plan assembly device"), which would automatically translate the mathematical formulation of a program into machine-readable punched film stock, something today would be called a translator or compiler.
The following example defines a function max3 (in a linear transcription) that calculates the maximum of three variables: