P′′
パラダイム | 命令型プログラミング, 構造化定理 |
---|---|
登場時期 | 1964 |
設計者 | コラド・ベーム(Corrado Böhm) |
型付け | なし |
方言 | Brainfuck |
影響を与えた言語 | Brainfuck |
P′′ (P double prime:ピーダブルプライム[1])は1964年にコラド・ベーム[2][3]によって作成された、チューリングマシンの一種を記述するための言語である。
チューリングマシンを記述するがゆえにその仕様は原始的である。チューリングマシンにもかかわらず、状態遷移はテープの内容とテープヘッドの位置だけで表現されるので、有限オートマトンの概念が希薄である。
定義
[編集](以下 P′′)は以下のように4つの命令アルファベット におけるワードの集合として形式的に定義される(formally defined)。
文法
[編集]- と は P′′ のワードである。
- もしも と が P′′ のワードならば、それらを繋げた も P′′ のワードである。
- もしも が P′′のワードならば、 も P′′ のワードである。
- 以上の3つの法則から得られるワードだけが P′′ のワードである。
意味論
[編集]- は無限長のテープを搭載したチューリングマシンのテープ・アルファベット(テープに書かれるデータの種類)である。 は空白の記号であり、 と等価である。
- P′′ の全命令は、全てのあり得るテープの構成の集合 の順列である。つまり、テープの内容とテープヘッドの位置の両方を考慮した全てのあり得る構成である[注釈 1]。
- は述語(値を受け取ってから真偽が決定するもの)であり、現在位置のシンボルは ではないことを示している。これは命令ではなく、プログラム中で使用されない。しかし、その代わりとして言語の定義を補助するために使われる。
- は、(可能であれば)1セル分テープヘッドを右方向へ移動することを意味する。
- は、現在位置のシンボル を に置き換える(つまり、現在位置のシンボルが のときは に置き換えられる)。そして、テープヘッドを1セル分左方向へ移動することを意味する。
- は関数の合成 を意味する。言い換えると、命令 は の前に実行される。
- は、条件 が成立している間だけ while ループで を反復することを意味する。
他のプログラミング言語との関連
[編集]- Brainfuck 言語は、P′′ の[注釈 2]非形式的な変種(informal variation)である(Brainfuck はテープの代わりにメモリを使うので、I/Oを扱わないところは異なる)。ベームはあらゆる計算可能関数を計算するのに十分な基本関数の集合のそれぞれに対して明確な P′′ のプログラムを提供している。使用したものは , そして4つのワード 、 (ここで は の 回の反復である)、 、 だけである。これらは6つの Brainfuck の命令 [, ], +, -, <, > と等価である。注意するべきは、 なので、現在位置のシンボルをn回インクリメントするとラップアラウンド( をインクリメントすると になること)する。そのため、一つの によって、その結果は現在位置のシンボルをデクリメントすることになる(訳注:テープ・アルファベットは n+1 種類あるので、n回インクリメントするとラップアラウンドして1つ少ない数のテープ・アルファベットになる)。
プログラムの例
[編集]ベーム[2]は、x > 0 を満たす整数xの前の数 (x-1) を計算する以下のプログラムを提供している。
これを等価のBrainfuckのプログラムに直接変換すると、
>[>]<[−[<[<]]−<]>+
このプログラムは bijective base-k 記法で表現されているある一つの整数を想定している。 は にそれぞれエンコードされる。そして、数字列の前後に がある(例えば、bijective base-2 の場合、数字の8は とエンコードされる。なぜなら、bijective base-2 において8は112である)。計算の最初と最後に数字列の前にある の上にヘッドが位置することになる。
注釈
[編集]- ^ 原文は "All instructions in P′′ are permutations of the set X of all possible tape configurations; that is, all possible configurations of both the contents of the tape and the position of the tape-head." となっている。テープの内容とテープヘッドの位置の両方を考慮した全てのあり得る構成が命令になるとは理解し難い。
- ^ 英語版Wikipediaではこの部分に「a minor」という形容も付いているが、それは特に訳す意味は無いと思われる。
出典
[編集]- ^ https://github.com/Pbtflakes/pdbl
- ^ a b Böhm, C.: "On a family of Turing machines and the related programming language", ICC Bull. 3, 185-194, July 1964.
- ^ Böhm, C. and Jacopini, G.: "Flow diagrams, Turing machines and languages with only two formation rules", CACM 9(5), 1966. (Note: This is the most-cited paper on the structured program theorem.)