ID:woirLXMAw

元スレ Brainf*ck/Brainf*ckならぬBrainfree仕様書
3 名前: 名無しさん@ふりーち :2014/04/27(日) 23:16:21.0 ID:woirLXMAw
BFerのおまいらには言うまでもないが、初めてのおまいらもいるだろう
そこで簡単なBF入門を書いていこうと思う

まずBFを書くときは二本のテープを想像する所から始める

片方はプログラムが書いてあるテープ
もう片方は全て0が書かれているテープだ

4 名前: 名無しさん@ふりーち :2014/04/27(日) 23:19:57.0 ID:woirLXMAw
この二本のテープがついた機械を操作するコマンドを入れるのが
BFerのおまいらができることだ

ポインタとか小難しいことが書いてあるが知ってみれば何てことはない
片方の全て0が書かれているテープを操作するだけに過ぎない

5 名前: 名無しさん@ふりーち :2014/04/27(日) 23:24:49.0 ID:woirLXMAw
まず >, < でテープを右,左にひとコマずらすことができる
+, - はそれぞれテープヘッドの場所の数値を足したり引いたりできる

これを使うとたとえば「+>++>+++」は1回足して右にずらして2回足して
右にずらして、3回足すといった操作を書くことができる。

これでテープの中身がどうなっているのか想像してみるといいだろう

6 名前: 名無しさん@ふりーち :2014/04/27(日) 23:40:24.0 ID:woirLXMAw
さて>>5の答えは分かっただろうか。答えは「実行」をクリックして確認してくれ

次は文字を出力するコマンド「.」だ。これはテープヘッドの数字を文字として出力する。
コンピュータは文字を直接理解することができないから、文字は数字と対応させているのはご存知のことだろう

「.」コマンドは数字から文字の変換と出力の両方をやっている

7 名前: 名無しさん@ふりーち :2014/04/27(日) 23:50:58.0 ID:woirLXMAw
最後にループコマンドだ。これは条件によってテープを対応する[, ]に飛ばすコマンドだ
[ を使えば0だったら対応する ] までプログラムのテープヘッドを送る

ところでプログラムのテープヘッドはどうやって動くのかご存知だろうか
ご存知でないおまいらのためにここで解説しておこう

プログラムのテープは一番左から順番にプログラムが一文字ずつ(場合によっては数文字)
入っており、一文字(1コマンド)読んで実行しては右に1つ移動する。これだけだ

しかし、ループコマンドの時は別で「[」の時はデータテープのヘッド位置に0が入っていたら
強制的に対応する「]」まで移動する「]」の時は条件なしに対応する「[」まで移動する

8 名前: 名無しさん@ふりーち :2014/04/27(日) 23:54:40.0 ID:woirLXMAw
一応これだけあればプログラムは書けるようだが、不便でしょうがない
なにせ10を表すのに「+++++++++」と書かなくてはいけない

なのでこれらを簡単にするため拡張を施した
「+10」みたいに後続に数字を入れるとその分だけ足す仕様にしてある

他にも直接数値を入れたいという事もあるだろう
そのため「`」(バッククォート)コマンドを用意した
「`10」みたいに書くと直接数値をデータテープのヘッドに書き込むことができる

9 名前: 名無しさん@ふりーち :2014/04/27(日) 23:57:38.0 ID:woirLXMAw
次に解説するのはアニメーション用スリープ命令「~」だ
これを使えば描画途中にスリープを入れてアニメーションを作ることができる

たとえば、これまでの書いたものを応用するとHello, worldは↓みたいに書ける
{bf:>`72>`101>`108>`108>`111>`44>`119>`111>`114>`108>`100>`33[<]>[.>]}

?? KB

クリエイティブ・コモン
    ズ・ライセンス

このページのドキュメントは全て クリエイティブ・コモンズ 表示 - 継承 3.0 非移植 ライセンスの下に提供されています。