プランカルクル(ドイツ語の発音: [ ˈplaːnkalkyːl ])は、 1942年から1945年にかけてコンラート・ツーゼによってエンジニアリング目的で設計されたプログラミング言語です。これは、コンピュータ向けに設計された最初の高水準プログラミング言語でした。ツーゼは、自身のZシリーズのマシンにプランカルクルを実装することはありませんでした。[ 2 ]
Kalkül(ラテン語のcalculusに由来)は形式体系を意味するドイツ語で、ヒルベルト式演繹体系の元の名前であるHilbert-Kalkülのように、 Plankalkülは計画のための形式体系を指します。[ 3 ]
計算機の開発において、ツゼは独学で、既に存在していた他の機械式計算機に関する知識を持たずに開発を進めた。ただし、後にZ3を製作する際には、ヒルベルトとアッカーマンの初等数学論理に関する著書(『数学論理の原理』参照)に触発された。[ 4 ]: 113、152、216論理回路を記述するために、ツゼは独自の図式と表記法を考案し、それを「条件文の組み合わせ論」(ドイツ語:Bedingungskombinatorik)と呼んだ。 1938年にZ1を完成させた後、ツゼは、自身が独自に考案した計算体系が既に存在し、命題論理として知られていたことを発見した。[ 5 ]: 3
ズーゼが考えていたものは、もっと強力なものでなければならなかった。命題論理はチューリング完全ではなく、単純な算術計算さえ記述できない[ 6 ] 。1939年5月、彼は後にプランカルキュルとなるものの開発計画について説明した[ 4 ]: 113、152、216彼はノートに次のように書いた。
正式なロジックですべての機能を使用できます。 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.

ツゼは博士論文執筆中に、分岐とループを扱うことができる、既知の最初の形式的なアルゴリズム記法体系を開発した[ 7 ] : 9 [ 8 ] : 18 [ 4 ] : 56。 1942年、彼はプランカルキュルでチェスプログラムの作成を開始した[ 4 ] : 216-217。1944年、ツゼはドイツの論理学者で哲学者のハインリヒ・ショルツと会い、ショルツはツゼの論理計算の利用を高く評価した[ 9 ]。1945年、ツゼは未発表の本でプランカルキュルについて記述した[ 10 ] 。ナチス・ドイツの崩壊により、彼は原稿を提出することができなかった[ 8 ] : 18
当時、世界で稼働していたコンピュータはENIACとハーバード・マークIの2台のみで、どちらもコンパイラを使用しておらず、ENIACは配線の接続方法を変更することでタスクごとに再プログラミングする必要があった。[ 5 ]: 3
連合軍の爆撃で彼のコンピューターのほとんどが破壊されたが、ツゼはZ4という1台のコンピューターを救出し、バート・ヒンデラングの一部であるアルプスの村ヒンターシュタインに移設することができた。[ 7 ] : 8
アルゴリズム言語を考案しようとする最初の試みは、1948年にK・ツーゼによって行われた。彼の記法は非常に汎用的であったが、その提案は本来受けるべき評価を得ることはなかった。
連合国によってコンピュータの製造も禁止されていたため、製造を続けることができなかったツゼは、より高レベルのプログラミングモデルと言語の開発に時間を費やした。[ 8 ] : 18 1948年、彼はArchiv der Mathematikに論文を発表し、 GAMMの年次総会で発表した。[ 4 ] : 89彼の研究はあまり注目を集めなかった。
1948/49年の冬学期、当時ミュンヘン大学(LMU)の形式論理学の非常勤教授であったドイツの論理学者ヴィルヘルム・ブリッツェルマイヤーは、自身のコロキウムでコンラート・ツーゼに応用論理学と彼の形式計画システム、すなわちプランカルキュルについて講義させた。[ 4 ]: 88 1957年の講演で、ツーゼはプランカルキュルが「眠れる森の美女としてしばらく眠った後、いずれは生き返るだろう」という希望を表明した。[ 5 ]: 3彼は、 ALGOL 58の設計者たちがプランカルキュルが自分たちの研究に与えた影響を決して認めなかったことに失望を表明した。[ 8 ]: 18 [ 7 ]: 15
Plankalkülは1972年に解説付きで再出版された。[ 12 ] Plankalkülの最初のコンパイラは、ヨアヒム・ホーマンが1975年の博士論文で実装した。[ 13 ]他の独立した実装は1998年[ 14 ]と2000年にベルリン自由大学で行われた。[ 5 ] : 2
Plankalkül はAPL言語や関係代数と比較されることが多い。代入文、サブルーチン、条件文、反復、浮動小数点演算、配列、階層レコード構造、アサーション、例外処理、目標指向実行、最終成果物に到達する方法を構築するための望ましい解からのバックトラックなどの高度な機能が含まれている。 Plankalkül は、幾何学的構造を表現するために使用できる一般化グラフ( verallgemeinerter Graph ) と呼ばれるデータ構造を提供する。[ 15 ]
プランカルクルの多くの特徴は後のプログラミング言語にも引き継がれているが、複数行を用いた独特な二次元表記法は例外である。
プランカルクルの特徴:[ 4 ]: 217
プランカルクルの唯一の基本データ型は、1ビットまたはブール値(ドイツ語:Ja-Nein-Werte – ツゼの用語でははい/いいえの値)です。これは識別子で示されます。それ以降のすべてのデータ型は複合型であり、「配列」と「レコード」によって基本型から構築される。[ 16 ]: 679
したがって、8ビットのシーケンス(現代のコンピューティングではバイトとみなされる)は、次のように表されます。、サイズがブール行列による によって説明される短縮表記法が存在するので、次のように書くことができる。の代わりに[ 16 ] : 679
タイプ2つの値を取り得るそして4ビットのシーケンスはL00Lのように記述できますが、そのようなシーケンスが数値を表す場合、プログラマは10進数表現9を使用できます。[ 16 ] : 679
2つの構成要素の記録そして次のように書かれています[ 16 ] : 679
Plankalkül の型 (ドイツ語: Art ) は、構造化された値 (ドイツ語: Struktur )、実用的な意味 (ドイツ語: Typ )、および可能な値に対する制限 (ドイツ語: Beschränkung ) の 3 つの要素から構成されます。[ 16 ] : 679ユーザー定義型は、数字付きの文字 A で識別されます。– 最初のユーザー定義型。
ズーゼはチェス理論から多くの例を用いた。[ 16 ]: 680
識別子は、数字と英数字の組み合わせです。[ 16 ] : 679変数には、以下の種類の識別子があります。[ 10 ] : 10
特定の種類の変数は、種類の下に書かれた番号によって識別されます。[ 16 ]: 679例:
プログラムとサブルーチンは、文字Pに続いてプログラム番号(およびオプションでサブルーチン番号)を付けてマークされます。例:、[ 16 ] : 679
プログラムの出力値 変数に保存されました識別子の下にある他のサブプログラムで利用可能です、そしてその変数の値を読み取るということは、関連するサブルーチンを実行することも意味する。[ 16 ] : 680
Plankalkül では、「コンポーネントインデックス」(ドイツ語: Komponenten-Index )を使用して変数の個々の要素にアクセスできます。たとえば、プログラムが変数に入力を受け取る場合タイプの(ゲームの状態) — 理事会に州を与える、 — 平方数 i に関する記事、そしてそのピースのビット番号 j。[ 16 ]: 680
V0[0]現代のプログラミング言語では、それは 、 、のような表記で表されますV0[0][i](V0[0][i][j]ただし、現代のプログラミング言語で単一のビットにアクセスするには、通常ビットマスクが使用されます)。
変数のインデックスは縦方向に記述されるため、プランカルクルの各命令を書き下すには複数行が必要となる。
最初の行には変数の種類が示され、次に文字V(ドイツ語:Variablen-Index)で示される変数番号、次にK(ドイツ語:Komponenten-Index)で示される変数サブコンポーネントのインデックス、そして最後にS(ドイツ語:Struktur-Index)で示される変数型が示されます。型は必須ではありませんが、Zuseはプログラムの読みやすさと理解に役立つと述べています。[ 16 ]: 681
列に並んで種類そして短縮するとそして[ 16 ] : 681
例:
インデックスは定数だけでなく、変数も使用できます。変数は他の変数のインデックスとして使用でき、その場合は線で示され、変数の値がどのコンポーネントインデックスで使用されるかが示されます。
ツゼは微積分学において、それまで数学では知られていなかった代入演算子を導入した。彼はそれを「代入の概念の使用は、数学とコンピュータサイエンスの重要な違いの1つである。[ 7 ]:14
ツゼは次のように書いた。
これは、より伝統的な数学の方程式に類似している。
コンラート・ツーゼが最初に割り当ての記号としてこのグリフを使用し、ハインツ・ルティシャウザーの影響下で。[ 16 ]: 681クヌートとパルドは、ズーゼが常に、そしてそれは
1948 年に«Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben» の出版社によって導入されました。[ 7 ] : 14チューリッヒでのALGOL 58会議では、ヨーロッパの参加者は Zuse によって導入された割り当て文字を使用することを提案しましたが、アメリカの代表団は を主張しました:=。[ 16 ] : 681
代入結果(左辺値)を格納する変数は、代入演算子の右側に書き込まれます。[ 7 ] : 14変数への最初の代入は宣言とみなされます。[ 16 ] : 681
代入演算子の左側は、変数に代入される値を定義する式 (ドイツ語: Ausdruck ) に使用されます。式では、算術演算子、ブール演算子、比較演算子 (など)。[ 16 ]: 682
べき乗演算は、インデックス演算と同様に、2次元表記の線を使って記述されます。[ 10 ] : 45

ブール値は整数で表されFALSE=0、 と が使用されました。条件付き制御フローは、 が真の場合にブロックを実行するTRUE=1ガード付きステートメント の形式をとりました。また、すべてのガードが偽になるまで繰り返される } の形式の反復演算子もありました。[ 17 ]A -> BBAW { A -> X; B -> Y
ツゼは単一のプログラムを「計算計画」( Rechenplan)と呼んだ。彼は「計画組立装置」( Planfertigungsgerät )と呼ばれる装置を構想した。これは、プログラムの数式表現を機械可読なパンチフィルムに自動的に変換するもので、今日では翻訳装置やコンパイラと呼ばれるものに相当する。[ 4 ]: 45、104、105
当初の表記法は二次元的であり、つまり、複数の行にまたがる意味においては、異なる終端記号のインデント、ひいては空間的な関係が重要であった。1990年代の後の実装では、線形表記法が開発された。
max3次の例では、(線形転写において)3つの変数の最大値を計算する関数を定義しています。
P1 max3 (V0[:8.0],V1[:8.0],V2[:8.0]) → R0[:8.0] max(V0[:8.0],V1[:8.0]) → Z1[:8.0] max(Z1[:8.0],V2[:8.0]) → R0[:8.0] 終わり P2 max (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] 終わり
{{cite web}}: CS1 メイン: ボット: 元の URL ステータスが不明 (リンク) ;マウラー、ヴォルフガング (2016-06-03)。「Der Plankalkül von Konrad Zuse」(ドイツ語)。ドイツ語での実装。2016-06-03 のオリジナルからアーカイブ。2017 年 10 月 3 日に取得。