ange1のブログスマートフォン用の表示で見るange1のブログこの広告は、90日以上更新していないブログに表示しています。実用的な組み方の指針と言うのがなかなかなく、興味を持ってもとっつきにくいのではないかと感じています。そこで、実際のコードを元に、どのように組んでいくのか、講座形式で紹介していきたいと思います。全部で8回の予定です。BF!”を題材とした導入、シンプルなループによる数値生成を紹介したいと思います。Brainf**kの実行モデルコードの実行Brainf**kのコードは、+-<>[],.の8種類の命令からなります。それ以外の文字はコメントとして無視されます。実行時は、先頭からコードを1文字ずつ見ていって、その文字に対応する命令を実行していく、という形をとります。最後まで到達すると、そこで実行が終了します。命令によって、セルの操作を行ったり、セルの位置を移動したりといったことを繰り返すことで、目的を果たすということです。今回は、まず基本的な+-.と、そののち<>[]を紹介します。BF!naiveな実装ではまずは、naiveな実装から見ていきます。セルの移動はさておき、セルの操作として+-,を使います。BF!”の出来上がりです。このようなコードになります。文字出力.毎に改行を入れていますが、改行もコメント扱いであって、特に入れても入れなくても動作に影響はありません。ついては-67個でセルの値を67減らし...と、+-によって値を増減させています。これであなたもBrainf**k使いの仲間入りです!シンプルなループによる値生成...そうは言っても、アルファベット1文字出力するために何十文字も+-を書いていたのでは気が滅入ります。する方法を紹介します。新しい命令の紹介ここで、新たに<>[]を紹介します。機能としては次の通り。現在のセルの値を見て、非ゼロなら対応する[の次の命令へ、ゼロなら次の命令へ移る左や右と書いていますが、Brainf**kの実行環境が管理するセルは、1次元的な広がりを持つもので、それを左右の方向に伸びるものとして見做しています。...ちょうど記号とも合致しますので。[]については、他の命令よりも複雑です。[と]は入れ子にすることもできますが、必ず同じ個数を使い、1対1に対応させる必要があります。これらの命令はセルの値によって挙動を変えるもので、すなわち条件分岐に使えるものです。これだけで、ループやif文等をこなせる優れものです。ループの記述では、これらの命令をつくってどのようにループを作るかを見ていきます。++++++++[->+++++++++<]<>によってセルの移動を行っています。これによって、どのセルに移動したかが分かるように、セルに名前をつけてコードにもコメントとして表すようにします。以下では次のようにします。A++++++++[A->B+++++++++<A]2個のA,Bというセルを行ったり来たりして操作を行う様子は次の図のようになっています。直前の+によってAに8がセットされた状態で、[が実行される。制御変数として、[]の中身によってBの加算を繰り返すループ構造になっており、8×9の計算がなされるわけです。ループ終了後、Aの値は0になり、代わりにBが72になっています。この後、今度は101を作ろうと思えば、72から30増やして1減らせばよいわけです。その部分のコードは例えば次のようになります。A+++++[A->B++++++<A]A>B-このループによって、Bに5×6が加算され、そののち1減らされます。大きな数を足し引きする部分をこのようなループに替えたコードは次のようになります。以前のコードより大分すっきりしているのが分かるかと思います。複数の値を同時に作るさて、ループによってコードが簡潔になりましたが、文字コードが大きく変化するところを1つのセルで管理するにはやや無駄が感じられます。そこで、複数のセルに幾つか値を作っておいて、近い文字コードは同じセルを、大きく違う文字コードは別のセルを見るようにすれば良いのではないかと考えられます。この場合、ループの中の処理を、1つのセルではなく、複数のセルをまとめて変化させるようにすることで対応できます。サンプルとしては次のコードが挙げられます。先ほどと同じようにループ部分の処理によるセルの値の遷移を図にすると、次のようになり、複数の値がループ毎に更新されているのが分かるかと思います。今回のまとめBrainf**kのコードは+-<>,.[]の8種類の文字で構成されます。XX!”の組み方を説明しました。次はいよいよ最後の命令である,を紹介していきたいと思います。今回でいよいよ最後になりました。)月別アーカイブはてなブログをはじめよう!ange1さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。