私のコンピューティング言語の理論のクラスでは、フロー制御用の while ステートメントのみを含む (if ステートメントを含まない) 言語でコードを実装するという宿題がありました。これは主に、while ループだけでチューリング完全な言語を記述できることを証明するためです。
言語の文法を理解できる人のために、言語のルールを次に示します。
S -> S;S | while C do S od | id := E
E -> E + T | T | E - T
T -> T * F | F | F / T
F -> id | cons | (E)
C -> E = E | E > E | E < E | E >= E | E <= E | E != E | C and C | C or C | not(C)
これは私のクラス ノートからコピーしたものです。
実装するコードは次のとおりです。
if d = 0 do
x := 1
else
x := a / d
いずれにせよ、先に進み、上記の言語規則を使用してそれを書きたい場合は、先に進んでください。それ以外の場合は、最も使いやすい言語で書いてください。ただし、いくつかの注意点があります。
- while ループ以外の if ステートメントやその他の種類のフロー制御はありません。
- チート禁止: 上記の文法には、break ステートメント、return ステートメント、または例外が含まれていません。それらを使用しないでください。
私はこれのためにコードを書きました (コードの投稿を見せてくれるものではないことを証明するために投稿します)。私はちょっと興味がありますが、他の誰かが思い付くことができます。