1

私はこの言語が初めてです。

コマンド<は、メモリ インデックスのポインタをデクリメントするために使用されます。

以下のコードは、2 つの 1 桁の数字を追加するためのものです。

このプログラムによると、最初にメモリ インデックスが位置 0 であるため、最初に入力を受け取り、それをメモリ [0] に格納します。次に、メモリ インデックスをデクリメントし、現在は -1 にするため、ランタイムを表示する必要があります。IDEone で正常に実行されるのはなぜですか?

メモリブロックは循環していますか?

,                           ;read character and store it in p1
------------------------------------------------   ;return ascii to Dec
<                           ;move pointer to p2 (second byte)
,                           ;read character and store it in p2
------------------------------------------------ ;return ascii to Dec
[                           ; enter loop
-                           ; decrement p2
>                           ; move to p1
+                           ; increment p1
<                           ; move to p2
]                           ; we exit the loop when the last cell is empty
>                           ;go back to p1
++++++++++++++++++++++++++++++++++++++++++++++++     ;return Dec to ascii
.                           ;print p1
4

3 に答える 3

0

さて、理論に基づいて完全にあなたの質問に答えてください。

まず第一に、brainfuckはturing-completeになるように設計されていることを知っておく必要があります。

Brainfuck のチューリングの完全性は、言語自体を使用して単一テープのチューリング マシンをシミュレートできることを前提としています。

回転機の定義は、無限テープを想定しています。

無限のメモリを取得することは不可能です。テープが無限であるかのように見せるには、できるだけ多くのメモリを使用する必要があります。

メモリがいっぱいになると、例外をスローする必要があります。メモリが有限になると、brainfuck はまったく意味をなさないからです。

于 2014-02-25T03:25:02.847 に答える
0

それは本当に通訳に依存します。元の言語は、30,000 個のメモリ セルの配列で構成されています。多くの場合、例外のスローを避けるためにセル 0 でデクリメントする場合は、最後のセルにループすることを選択します。

于 2014-04-17T21:48:00.990 に答える