3

私はブレインファックの初心者で、最初の一歩を踏み出し始めたばかりです。ポインターが範囲外にあるかどうかを確認するための巧妙な方法 (少しハックであっても) を見つけるための助けが必要です。したがって、メモリ配列の最初のセルにいることを確認し、ポインタをそれ以上減少させないようにしたいと考えています。これをグーグルで検索してみましたが、何も見つかりませんでした。誰かがアイデアを持っていれば、それが純粋なロジックでコードがなくてもありがたいです。

<<<<.どうやら、誰かがメモリ配列の最後でラップするようなコードを書いても、頭がおかしいインタープリターの多くは行き詰まらないようです。ただし、それらのいくつかは立ち往生しています。したがって、これが非常にインタープリター固有の質問である場合は、少し一般化させてください。既存の位置に関係なく、メモリ配列内の特定の位置に移動する方法はありますか?

4

2 に答える 2

3

コードを a で開始>して、最初のセルを 0 にします。その間の数値が 0 ではないと仮定すると[<]、開始配列を返すために使用できます。たとえば、セル 1 を 0 のままにして、ASCII 文字 A ~ Z をセル 2 ~ 27 に明示的にマップしました。このようにして、メッセージを印刷したい場合は、

> >>>>>>>>.>.[<]データ ポインタをセル 1 に返す前に hi を表示し、それらすべてを書き込む時間を節約し<ます。

繰り返しますが、これはその間の数値が 0 ではないことを前提としています。ただし、特定のセルのデータを処理していて、データが 0 にならないことがわかっている場合は、0 とラベル付けされた前のセルに戻ることができます。これは、多かれ少なかれ、バッチファイルの逆 goto に似ています。

したがって、セル データがあり、3 番目の 0 にデータポインタがあるとします。コマンドが 0 の値をスキップし、次の 0 に達するまで繰り返すこと[0 2 3 4 0 5 3 9 3 2 0 2 3 2 0]で、最初の配列に戻ることができます。同じものを使用できます。コードのデータ ポインターをすばやく取得する必要がある場合は、逆を使用することをお勧めします。その上、次のコードをテスト実行すると、追加にもかかわらず最初のセルに戻りました。これは、セル 1 のラベルが 0 であるため、角かっこによってコードが強制的にスキップされたためです (このリソースを使用してテストしました) 。<[<]<[<][<]>+++>++>+[<][<][<]<

ただし、@Cedric Mamo が回答で述べたように、セル 1 に到達した後に誤って < を入力すると、範囲外になるため、コードが範囲外になるのを防ぐ明示的な方法はありません。私が上で述べたようなセーフガードでプログラムし、あなたがしていることを監視しない限り、これを防ぐ正確な方法はありません.

于 2016-03-21T03:54:14.527 に答える
3

「既存の位置に関係なく、メモリ配列内の特定の位置に移動する方法はありますか?」

非常に簡単な答え: いいえ。

私は賢くなろうとしているわけではありません。答えは本当に短くて簡単です。それはBFでは不可能です。範囲外にならないようにしたいですか?ポインターが実際にどこにあるかを常に確認できるようにすることで、適切にコーディングする必要があります。

また、「ハッキーな解決策」を使用して 1 つのインタープリターでたまたまうまく動作するコードを書いたとしても、それは実際には有効なプログラムではありません。どんなインタープリターでも実行できません。

BF では、セルはアドレス指定できません。その事実とともに生きていかなければなりません。

于 2016-03-03T21:37:21.187 に答える