Calco de tablones

Lenguaje de programación diseñado entre 1942 y 1945

Calco de tablones
ParadigmaProcesal
Diseñado porKonrad Zuse
Apareció por primera vez1948 ; hace 76 años : se publicó el primer concepto ( 1948 )
Implementaciones principales
Compilador de calco de plancton de la FU Berlín en 2000
Influenciado
Superplan , ALGOL 58 [1]

Plankalkül ( pronunciación alemana: [ˈplaːnkalkyːl] ) es un lenguaje de programación diseñado para fines de ingeniería por Konrad Zuse entre 1942 y 1945. Fue el primer lenguaje de programación de alto nivel diseñado para una computadora.

Kalkül (del latín calculus ) es el término alemán para un sistema formal —como en Hilbert-Kalkül , el nombre original del sistema de deducción de estilo Hilbert— , por lo que Plankalkül se refiere a un sistema formal para la planificación. [2]

Historia de la programación

En el campo de la creación de máquinas de computación, Zuse fue autodidacta y las desarrolló sin conocimiento sobre otras máquinas de computación mecánicas que ya existían, aunque más tarde (construyendo la Z3 ) se inspiró en el libro de Hilbert y Ackermann sobre lógica matemática elemental (ver Principios de lógica matemática ). [3] : 113, 152, 216  Para describir circuitos lógicos, Zuse inventó su propio diagrama y sistema de notación, al que llamó "combinatoria de condicionales" ( en alemán : Bedingungskombinatorik ). Después de terminar la Z1 en 1938, Zuse descubrió que el cálculo que había ideado independientemente ya existía y se conocía como cálculo proposicional . [4] : ​​3  Sin embargo, lo que Zuse tenía en mente necesitaba ser mucho más poderoso (el cálculo proposicional no es Turing-completo y no es capaz de describir ni siquiera cálculos aritméticos simples [5] ). En mayo de 1939, describió sus planes para el desarrollo de lo que se convertiría en Plankalkül. [3] : 113, 152, 216  Escribió lo siguiente en su cuaderno:

Marcador histórico en la casa en Hinterstein  [de] donde Zuse trabajó en Plankalkül

Mientras trabajaba en su tesis doctoral, Zuse desarrolló el primer sistema formal conocido de notación de algoritmos [6] : 9  capaz de manejar ramas y bucles. [7] : 18  [3] : 56  En 1942 comenzó a escribir un programa de ajedrez en Plankalkül. [3] : 216–217  En 1944, Zuse se reunió con el lógico y filósofo alemán Heinrich Scholz , quien expresó su aprecio por la utilización del cálculo lógico por parte de Zuse . [8] En 1945, Zuse describió Plankalkül en un libro inédito. [9] Sin embargo, el colapso de la Alemania nazi le impidió enviar su manuscrito. [7] : 18 

En ese momento, las únicas dos computadoras que funcionaban en el mundo eran ENIAC y Harvard Mark I , ninguna de las cuales usaba un compilador, y ENIAC necesitaba ser reprogramada para cada tarea cambiando la forma en que se conectaban los cables. [4] : 3 

Aunque la mayoría de sus computadoras fueron destruidas por las bombas aliadas, Zuse pudo rescatar una máquina, la Z4 , y trasladarla al pueblo alpino de Hinterstein [6] : 8  (parte de Bad Hindelang ).

El primer intento de idear un lenguaje algorítmico lo realizó K. Zuse en 1948. Su notación era bastante general, pero la propuesta nunca alcanzó la consideración que merecía.

—  Heinz Rutishauser , creador de ALGOL

Incapaz de seguir construyendo computadoras –lo que también estaba prohibido por las Potencias Aliadas [10] – Zuse dedicó su tiempo al desarrollo de un modelo y lenguaje de programación de nivel superior. [7] : 18  En 1948, publicó un artículo en el Archiv der Mathematik y lo presentó en la Reunión Anual del GAMM . [3] : 89  Su trabajo no logró atraer mucha atención. [ cita requerida ] En una conferencia de 1957, Zuse expresó su esperanza de que Plankalkül, "después de algún tiempo como La Bella Durmiente , aún cobrara vida". [4] : 3  Expresó su decepción porque los diseñadores de ALGOL 58 nunca reconocieron la influencia de Plankalkül en su propio trabajo. [7] : 18  [6] : 15 

Plankalkül se volvió a publicar con comentarios en 1972. [11] El primer compilador para Plankalkül fue implementado por Joachim Hohmann en su disertación de 1975. [12] Otras implementaciones independientes siguieron en 1998 [13] y 2000 en la Universidad Libre de Berlín . [4] : 2 

Descripción

Plankalkül ha sido comparado con el lenguaje APL y con el álgebra relacional . Incluye instrucciones de asignación, subrutinas , instrucciones condicionales, iteración, aritmética de punto flotante , matrices, estructuras de registros jerárquicos, aserciones, manejo de excepciones y otras características avanzadas como la ejecución dirigida a objetivos. Plankalkül proporciona una estructura de datos llamada gráfico generalizado ( verallgemeinerter Graph ), que se puede utilizar para representar estructuras geométricas. [14]

Muchas características del Plankalkül reaparecen en lenguajes de programación posteriores; una excepción es su notación bidimensional idiosincrásica que utiliza múltiples líneas.

Algunas características del Plankalkül: [3] : 217 

  • solo variables locales
  • Las funciones no admiten recursión.
  • Solo admite llamadas por valor
  • Los tipos compuestos son matrices y tuplas.
  • contiene expresiones condicionales
  • Contiene un bucle for y un bucle while
  • No ir

Tipos de datos

El único tipo de datos primitivo en el Plankalkül es un bit único o booleano ( en alemán : Ja-Nein-Werte – valor sí-no en la terminología de Zuse). Se denota por el identificador . Todos los demás tipos de datos son compuestos y se construyen a partir de primitivos por medio de "matrices" y "registros". [15] : 679  S 0 {\estilo de visualización S0}

Por lo tanto, una secuencia de ocho bits (que en la informática moderna podría considerarse como byte ) se denota por , y una matriz booleana de tamaño por   se describe por . También existe una notación abreviada, por lo que se podría escribir en lugar de . [15] : 679  8 × S 0 {\displaystyle 8\veces S0} metro {\estilo de visualización m} norte {\estilo de visualización n} metro × norte × S 0 {\displaystyle m\veces n\veces S0} S 1 norte {\displaystyle S1\cdot n} norte × S 0 {\displaystyle n\times S0}

El tipo puede tener dos valores posibles y . Por lo tanto, una secuencia de 4 bits se puede escribir como L00L, pero en los casos en que dicha secuencia represente un número, el programador puede utilizar la representación decimal 9. [15] : 679  S 0 {\estilo de visualización S0} 0 {\estilo de visualización 0} yo {\estilo de visualización L}

Registro de dos componentes y se escribe como . [15] : 679  σ {\estilo de visualización \sigma} τ {\estilo de visualización \tau} ( σ , τ ) {\displaystyle (\sigma,\tau)}

El tipo ( en alemán : Art ) en Plankalkül consta de 3 elementos: valor estructurado ( en alemán : Struktur ), significado pragmático ( en alemán : Typ ) y posible restricción de valores posibles ( en alemán : Beschränkung ). [15] : 679  Los tipos definidos por el usuario se identifican con la letra A con un número, como – primer tipo definido por el usuario. A 1 {\estilo de visualización A1}

Ejemplos

Zuse utilizó muchos ejemplos de la teoría del ajedrez: [15] : 680 

A 1 {\estilo de visualización A1} S 1 3 {\displaystyle S1\cdot 3} Coordenadas del tablero de ajedrez (tiene un tamaño de 8x8 por lo que 3 piezas son suficientes)
A 2 {\estilo de visualización A2} 2 × A 1 {\displaystyle 2\times A1} cuadrado del tablero (por ejemplo L00, 00L denota e2 en notación algebraica )
A 3 {\estilo de visualización A3} S 1 4 {\displaystyle S1\cdot 4} pieza (por ejemplo, 00L0 — rey blanco)
A 4 {\estilo de visualización A4} ( A 2 , A 3 ) {\estilo de visualización (A2,A3)} pieza en un tablero (por ejemplo L00, 00L; 00L0 — rey blanco en e2)
A 5 {\estilo de visualización A5} 64 × A 3 {\displaystyle 64\times A3} Tablero (posiciones de las piezas, describe qué pieza contiene cada uno de los 64 cuadrados)
A 10 {\estilo de visualización A10} ( A 5 , S 0 , S 1 4 , A 2 ) {\displaystyle (A5,S0,S1\cdot 4,A2)} Estado del juego (  — tablero,  — jugador a mover,  — posibilidad de enroque (2 para blancas y 2 para negras),  — información sobre la casilla en la que es posible realizar un movimiento al paso A 5 {\estilo de visualización A5} S 0 {\estilo de visualización S0} S 1 4 {\displaystyle S1\cdot 4} A 2 {\estilo de visualización A2}

Identificadores

Los identificadores son caracteres alfanuméricos con un número. [15] : 679  Existen los siguientes tipos de identificadores para variables: [9] : 10 

  • Valores de entrada ( alemán : Eingabewerte, Variablen ): marcados con una letra V.
  • Valores intermedios y temporales ( alemán : Zwischenwerte ): marcados con la letra Z.
  • Constantes ( en alemán : Constanten ) — marcadas con la letra С.
  • Valores de salida ( en alemán : Resultatwerte ) — marcados con una letra R.

Una variable particular de algún tipo se identifica mediante un número, escrito debajo del tipo. [15] : 679  Por ejemplo:

V 0 {\displaystyle {\begin{matriz}V\\0\end{matriz}}} , , etc. O 2 {\displaystyle {\begin{matriz}Z\\2\end{matriz}}} do 31 {\displaystyle {\begin{matriz}C\\31\end{matriz}}}

Los programas y subprogramas se marcan con una letra P, seguida de un número de programa (y opcionalmente de subprograma). Por ejemplo , . [15] : 679  PAG 13 {\estilo de visualización P13} PAG 5 7 {\displaystyle P5\cdot 7}

El valor de salida del programa guardado allí en la variable está disponible para otros subprogramas bajo el identificador , y leer el valor de esa variable también significa ejecutar el subprograma relacionado. [15] : 680  PAG 13 {\estilo de visualización P13} R 0 {\displaystyle {\begin{matriz}R\\0\end{matriz}}} R 17 0 {\displaystyle {\begin{matriz}R17\\0\end{matriz}}}

Acceder a elementos por índice

Plankalkül permite el acceso a elementos separados de una variable mediante el uso del "índice de componentes" ( en alemán : Komponenten-Index ). Cuando, por ejemplo, el programa recibe una entrada en una variable de tipo (estado del juego), entonces  — proporciona el estado del tablero,  — la pieza en la casilla número i y el número de bit j de esa pieza. [15] : 680  V 0 {\displaystyle {\begin{matriz}V\\0\end{matriz}}} A 10 {\estilo de visualización A10} V 0 0 {\displaystyle {\begin{matriz}V\\0\\0\end{matriz}}} V 0 0 i {\displaystyle {\begin{matriz}V\\0\\0\cdot i\end{matriz}}} V 0 0 i yo {\displaystyle {\begin{matriz}V\\0\\0\cdot i\cdot j\end{matriz}}}

En los lenguajes de programación modernos, esto se describiría mediante una notación similar a V0[0], V0[0][i], V0[0][i][j](aunque para acceder a un solo bit en los lenguajes de programación modernos normalmente se utiliza una máscara de bits ).

Sintaxis bidimensional

Debido a que los índices de las variables se escriben verticalmente, cada instrucción de Plankalkül requiere varias filas para escribirse. [ cita requerida ]

La primera fila contiene el tipo de variable, luego el número de variable marcado con la letra V ( en alemán : Variablen-Index ), luego los índices de los subcomponentes de la variable marcados con K ( en alemán : Komponenten-Index ) y luego ( en alemán : Struktur-Index ) marcados con S, que describe el tipo de variable. El tipo no es obligatorio, pero Zuse señala que esto ayuda a leer y comprender el programa. [15] : 681 

En los tipos de línea y se podría acortar a y . [15] : 681  S {\estilo de visualización S} S 0 {\estilo de visualización S0} S 1 {\estilo de visualización S1} 0 {\estilo de visualización 0} 1 {\estilo de visualización 1}

Ejemplos:

V V 3 K S metro × 2 × 1 norte {\displaystyle {\begin{array}{r|l}&V\\V&3\\K&\\S&m\times 2\times 1\cdot n\end{array}}} variable V3 — lista de pares de valores de tipo metro {\estilo de visualización m} S 1 norte {\displaystyle S1\cdot n}
V V 3 S metro × 2 × 1 norte {\displaystyle {\begin{array}{r|l}&V\\V&3\\S&m\times 2\times 1\cdot n\end{array}}} La fila K se puede omitir cuando está vacía. Por lo tanto, esta expresión significa lo mismo que la anterior.
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}}} El valor de ocho bits (índice 7), del primer par (índice 0), del i-ésimo elemento de la variable V3, tiene tipo booleano ( ). S 0 {\estilo de visualización S0}

Los índices no solo pueden ser constantes. Las variables pueden utilizarse como índices para otras variables, y esto se marca con una línea que muestra en qué componente se utilizaría el valor del índice de la variable:

Uso de una variable como índice de otra variable, en notación Plankalül 2DElemento Z5 de la variable V3. Equivalente a la expresión V3[Z5]en muchos lenguajes de programación modernos. [15] : 681 

Operación de asignación

Zuse introdujo en su cálculo un operador de asignación, desconocido en matemáticas hasta entonces. Lo marcó con « » y lo llamó signo de rendimiento ( en alemán : Ergibt-Zeichen ). El uso del concepto de asignación es una de las diferencias clave entre las matemáticas y la informática. [6] : 14  {\displaystyle \Flecha derecha}

Zuse escribió que la expresión:

O + 1 O V 1 1 {\displaystyle {\begin{array}{r|lll}&Z+1&\Rightarrow &Z\\V&1&&1\\\end{array}}}

es análoga a la ecuación matemática más tradicional:

O + 1 = O V 1 1 K i i + 1 {\displaystyle {\begin{array}{r|lll}&Z+1&=&Z\\V&1&&1\\K&i&&i+1\\\end{array}}}

Hay afirmaciones de que Konrad Zuse utilizó inicialmente el glifocomo señal de asignación, y comenzó a usarse bajo la influencia de Heinz Rutishauser . [15] : 681  Knuth y Pardo creen que Zuse siempre escribió , y que {\displaystyle \Rightarrow } {\displaystyle \Rightarrow } fue introducido por los editores de «Über den allgemeinen Plankalkül als Mittel zur Formulierung esquematisch-kombinativer Aufgaben» en 1948. [6] : 14  En la conferencia ALGOL 58 en Zurich, los participantes europeos propusieron utilizar el carácter de asignación introducido por Zuse, pero el americano La delegación insistió :=. [15] : 681 

La variable que almacena el resultado de una asignación ( valor l ) se escribe en el lado derecho del operador de asignación. [6] : 14  La primera asignación a la variable se considera una declaración. [15] : 681 

El lado izquierdo del operador de asignación se utiliza para una expresión ( en alemán : Ausdruck ), que define qué valor se asignará a la variable. Las expresiones pueden utilizar operadores aritméticos, operadores booleanos y operadores de comparación ( etc.). [15] : 682  = , , {\displaystyle =,\neq ,\leq }

La operación de exponenciación se escribe de manera similar a la operación de indexación, utilizando líneas en la notación bidimensional: [9] : 45 

Notación de exponenciación en Plankalkül

Flujo de control

Los valores booleanos se representaban como números enteros con FALSE=0y TRUE=1. El flujo de control condicional tomó la forma de una declaración protegida A -> B, que ejecutaba el bloque Bsi Aera verdadero. También había un operador de iteración, de la forma W { A -> X; B -> Y} que se repetía hasta que todas las protecciones fueran falsas. [16]

Terminología

Zuse denominó a un único programa Rechenplan ("plan de cálculo"). Imaginó lo que llamó Planfertigungsgerät ("dispositivo de montaje de planes"), que traduciría automáticamente la formulación matemática de un programa en una película perforada legible por máquina , algo que hoy se llamaría traductor o compilador . [3] : 45, 104, 105 

Ejemplo

La notación original era bidimensional. [ aclaración necesaria ] Para una implementación posterior en la década de 1990, se desarrolló una notación lineal.

El siguiente ejemplo define una función max3(en una transcripción lineal) que calcula el máximo de tres variables:

P1 máx3 (V0[:8.0],V1[:8.0],V2[:8.0]) → R0[:8.0]máx(V0[:8.0],V1[:8.0]) → Z1[:8.0]máx(Z1[:8.0],V2[:8.0]) → R0[:8.0]FINP2 máx. (V0[:8.0],V1[:8.0]) → R0[:8.0]V0[:8.0] → Z1[:8.0](Z1[:8.0] < V1[:8.0]) → V1[:8.0] → Z1[:8.0]Z1[:8.0] → R0[:8.0]FIN

Véase también

Referencias

  1. ^ Rojas, Raúl ; Hashagen, Ulf [en alemán] (2002). Las primeras computadoras: historia y arquitecturas. MIT Press . p. 292. ISBN 978-0-26268137-7. Recuperado el 25 de octubre de 2013 .
  2. ^ Zenil, Héctor [en Wikidata] , ed. (2012). Un universo computable: comprensión y exploración de la naturaleza como computación - con prólogo de Sir Roger Penrose . Singapur: World Scientific Publishing Company . p. 791.
  3. ^ abcdefg Hellige, Hans Dieter, ed. (Enero de 2004) [noviembre de 2002]. Escrito en Bremen, Alemania. Geschichten der Informatik. Visionen, Paradigmen, Leitmotive (en alemán) (1 ed.). Berlín/Heidelberg, Alemania: Springer-Verlag . págs. 45, 56, 89, 104–105, 113, 152, 216–217. doi :10.1007/978-3-642-18631-8. ISBN 978-3-540-00217-8. ISBN 3-540-00217-0 . (xii+514 páginas)
  4. ^ abcde Rojas, Raúl ; Göktekin, Cüneyt; Friedland, Gerald; Kruger, Mike; Scharf, Ludmila; Kuniss, Denis; Langmack, Olaf (enero de 2004) [noviembre de 2002]. "Konrad Zuses Plankalkül - Seine Genese und eine moderne Implementierung" (PDF) . En Hellige, Hans Dieter (ed.). Geschichten der Informatik. Visionen, Paradigmen, Leitmotive. Parte 3: Leitideen und Paradigmen in der Entwicklung der Programmiersprachen und der Programmierung (en alemán) (1 ed.). Berlín/Heidelberg, Alemania: Springer-Verlag . págs. 215–235 [2–4]. doi :10.1007/978-3-642-18631-8_9. ISBN 978-3-642-62208-3. Archivado desde el original (PDF) el 1 de mayo de 2006.(21 [24] páginas)
  5. ^ "¿Por qué la lógica proposicional no es completa en Turing?". Matemáticas. StackExchange . 2013-04-01. Archivado desde el original el 2023-11-02 . Consultado el 2023-11-02 .
  6. ^ abcdef Knuth, Donald Ervin ; Pardo, Luis Isidoro Trabb [en portugués] (agosto de 1976). "El desarrollo temprano de los lenguajes de programación" (PDF) . Universidad de Stanford, Departamento de Ciencias de la Computación. pp. 8, 9, 14, 15. Archivado desde el original (PDF) el 2017-09-12 . Consultado el 2017-12-28 .
  7. ^ abcd Giloi, Wolfgang K. [en alemán] (abril-junio de 1997). "Plankalkül de Konrad Zuse: el primer lenguaje de programación de alto nivel "no von Neumann"". IEEE Annals of the History of Computing . 19 (2). IEEE : 17–24. doi :10.1109/85.586068.(8 páginas)
  8. ^ Petzold, Hartmut [en alemán] (1992). Rechenkünstler moderno. Die Industrialisierung der Rechentechnik en Deutschland (en alemán). Múnich, Alemania: CH Beck Verlag .
  9. ^ a b C Zuse, Konrad (1946) [1945]. Rojas, Raúl ; Wagner, G.; Scharf, Ludmila; Schöttker-Söhl [Schötke-Suhl], Susanne (eds.). Der Plankalkül (In der Fassung von 1945) (Manuscrito) (en alemán). Archivo de Internet de Konrad Zuse. págs. 10, 45. ZIA ID: 0233. Archivado desde el original el 16 de abril de 2015 . Consultado el 1 de noviembre de 2023 .(1+1+180 páginas)
  10. ^ Coy, Wolfgang [en alemán] (enero de 2004) [noviembre de 2002]. "¿Was ist Informatik? Zur Entstehung des Faches an den deutschen Universitäten". En Hellige, Hans Dieter (ed.). Geschichten der Informatik. Visionen, Paradigmen, Leitmotive. Parte 5: Wandel der Leitkonzepte in der Wissenschaftsdisziplin Informatik (en alemán) (1 ed.). Berlín/Heidelberg, Alemania: Springer-Verlag . págs. 473–498 [474]. doi :10.1007/978-3-642-18631-8_17. ISBN 978-3-540-00217-8. ISBN 3-540-00217-0 . [1]
  11. ^ Zuse, Konrad (1972). Der Plankalkül. Kommentierter Nachdruck der Fassung von 1945 (en alemán). vol. 63. Sankt Augustin, Alemania: Gesellschaft für Mathematik und Datenverarbeitung (GMD) / Bundesministerium für Bildung und Wissenschaft (BMBW). BMW-GMD-63.
  12. ^ Hohmann, Joaquín (1979). Der PLANKALKÜL im Vergleich mit algoritmischen Sprachen . Reihe Informatik und Operations Research (en alemán). vol. 7 (1 ed.). Darmstadt, Alemania: S. Toeche-Mittler-Verlag (stmv). ISBN 3-87820-028-5.(136 páginas) Contenido
  13. ^ Descripción de Plankalkül-Compiler por Wolfgang Mauerer; Mauerer, Wolfgang (3 de junio de 2016). "Der Plankalkül von Konrad Zuse" (en alemán). Implementación en alemán. Archivado desde el original el 3 de junio de 2016 . Consultado el 3 de octubre de 2017 .
  14. ^ Giloi, Wolfgang K. [en alemán] (noviembre de 1990), Konrad Zuses Plankalkül als Vorläufer moderner Programmiermodelle (en alemán)
  15. ^ abcdefghijklmnopqr Bauer, Friedrich L. ; Wössner, Hans (1972). "El "Plankalkül" de Konrad Zuse: un precursor de los lenguajes de programación actuales" (PDF) . Comunicaciones de la ACM . 15 (7): 678–685. doi :10.1145/361454.361515. S2CID  17681101. Archivado desde el original (PDF) el 20 de febrero de 2009.(HTML)
  16. ^ Rojas, Raúl (2001). "Plankalkül" (PDF) . Enciclopedia de computadoras e historia de la computación . Chicago/Londres: Fitzroy Dearborn Publishers . p. 634. ISBN. 1-57958235-4. Consultado el 26 de mayo de 2023 .

Lectura adicional

  • Zuse, Konrad (1943). Ansätze einer Theorie des allgemeinen Rechnens unter besonderer Berücksichtigung des Aussagenkalküls und dessen Anwendung auf Relaisschaltungen [ Inicio de una teoría universal de la computación con especial consideración del cálculo proposicional y su aplicación a circuitos de relés ] (manuscrito inédito) (en alemán). Documentos Zuse 045/018.
  • Zuse, Konrad (6 de diciembre de 1948) [noviembre de 1948]. Escrito en Hopferau bei Füssen, Alemania. "Über den allgemeinen Plankalkül als Mittel zur Formulierung Schematisch-Kombinativer Aufgaben". Archiv der Mathematik (en alemán). 1 (6). Karlsruhe / Stuttgart / Basilea, Alemania: Birkhäuser Verlag : 441–449. doi :10.1007/BF02038459. eISSN  1420-8938. ISSN  0003-889X.(9 páginas)
  • Rojas, Raúl ; Göktekin, Cüneyt; Friedland, Gerald; Kruger, Mike; Kuniss, Denis; Langmack, Olaf (febrero de 2000). Plankalkül: el primer lenguaje de programación de alto nivel y su implementación (PDF) . Berlín, Alemania: Institut für Informatik, Freie Universität Berlin y Feinarbeit.de. Informe Técnico B-3/2000. Archivado desde el original el 1 de mayo de 2006.[2] (22 páginas)
  • Bruines, Bram (8 de enero de 2010). "Plankalkül" (PDF) (Tesis). Archivado (PDF) desde el original el 2 de noviembre de 2023. Consultado el 2 de noviembre de 2023 .(24 páginas)
  • "Plankalkül-Programme". Konrad Zuse Internet Archive (en alemán e inglés). 2014-08-21. Archivado desde el original el 2014-08-21 . Consultado el 2017-10-04 .(NB. Plankalkül Applets y documentos Java.)
Retrieved from "https://en.wikipedia.org/w/index.php?title=Plankalkül&oldid=1253698785"