2: 2009-12-19 (土) 21:05:09 HOSINO[6] [7] | 3: 2009-12-20 (日) 06:47:31 HOSINO[6] [8] | ||
---|---|---|---|
Line 101: | Line 101: | ||
**HQ9F+でプログラミング [#ae1e7dc1] | **HQ9F+でプログラミング [#ae1e7dc1] | ||
HQ9F+も、HQ9+と互換性のある言語のひとつです。~ | HQ9F+も、HQ9+と互換性のある言語のひとつです。~ | ||
- | HQ9++で書かれたプログラムをip01.g01で実行するときは、~ | + | HQ9F+で書かれたプログラムをip01.g01で実行するときは、~ |
プロンプト>efg01 ip01 file:ファイル名 type:12 | プロンプト>efg01 ip01 file:ファイル名 type:12 | ||
とコマンドプロンプトに打ち込みます。~ | とコマンドプロンプトに打ち込みます。~ | ||
Line 125: | Line 125: | ||
と表示されます。~ | と表示されます。~ | ||
また、お分かりだと思いますが、HQ9F+では、Fもコメントではなく命令として扱われるのでご注意ください。~ | また、お分かりだと思いますが、HQ9F+では、Fもコメントではなく命令として扱われるのでご注意ください。~ | ||
+ | *efg01上で動くプログラムの作り方講座(2) [#qed0b097] | ||
+ | 前回はHQ9+系統のプログラミング言語を使ってプログラムを作りました。~ | ||
+ | しかし、HQ9+は初心者用の言語なので、コンピュータが本来処理できる計算の、ほんの一部しか実行できません。~ | ||
+ | これに対して、今回扱うBrainf*ck系統のプログラミング言語はコンピュータが行える全ての計算が可能である、とされています。~ | ||
+ | 最初のうちはちょっと難しく感じるかもしれませんが、頑張ってください。~ | ||
+ | **Brainf*ckでプログラミング [#uf970460] | ||
+ | Brainf*ckのプログラムをip02.g01で実行する際は、~ | ||
+ | プロンプト>efg01 ip02.g01 file:ファイル名 type:0 | ||
+ | と打ち込みます。~ | ||
+ | HQ9+よりも早くインタプリタを製作していたため、typeの番号がHQ9+よりも小さいですが、ip01.g01ではBrainf*ckの派生言語は対応していません。~ | ||
+ | なるべくip02.g01をお使いになる事をお勧めします。~ | ||
+ | ***まずはHello, world! [#j45975eb] | ||
+ | 伝統は大切にするべきなので、いきなりですがHello, world!と表示するプログラムを以下に示します。~ | ||
+ | ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ | ||
+ | ++++++++++ ++++++++++ ++. ++++++++++ ++++++++++ | ||
+ | +++++++++. +++++++. . +++. ---------- | ||
+ | ---------- ---------- ---------- ---------- ---------- | ||
+ | -------. ---------- --. ++++++++++ ++++++++++ | ||
+ | ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ | ||
+ | ++++++++++ +++++++. --------. +++. ------. | ||
+ | --------. ---------- ---------- ---------- ---------- | ||
+ | ---------- ---------- -------. | ||
+ | かなり意味不明だと思いますが、これから少しずつ説明しますのでご安心を。~ | ||
+ | ***Brainf*ckの基本仕様を知る! [#a51535fc] | ||
+ | Brainf*ckは仮想的なコンピュータの機械語、ととらえることが出来ます。~ | ||
+ | しかも、機械語としては非常に高い可読性を持っています。~ | ||
+ | その仮想機械は一つのレジスタと、1024バイトのメモリを持っています。~ | ||
+ | (この1024という数字は星野が勝手に決めた物であり、処理系によって変化します。)~ | ||
+ | レジスタもメモリも最初は0で初期化されています。~ | ||
+ | 機械語は全部で8種類あります。~ | ||
+ | + レジスタが指しているメモリのアドレスにある値を1増加させます。 | ||
+ | - レジスタが指しているメモリのアドレスにある値を1減少させます。 | ||
+ | > レジスタの値を1増加させます。 | ||
+ | < レジスタの値を1減少させます。 | ||
+ | [ レジスタが指しているメモリのアドレスにある値が0なら、対応する]の直後にジャンプします。 | ||
+ | ] レジスタが指しているメモリのアドレスにある値が0以外なら、対応する[にジャンプします。 | ||
+ | . レジスタが指しているメモリのアドレスにある値を、文字コードとみなして出力します。 | ||
+ | , レジスタが指しているメモリのアドレスに、入力された文字のコードを代入します。 | ||
+ | 上記以外の文字はコメントとみなされて全て無視されます。~ | ||
+ | ***Hello, world!を読み解く! [#hff35431] | ||
+ | まず、先にあげたソースの解説をしようと思います。~ | ||
+ | ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ | ||
+ | ++++++++++ ++++++++++ ++. ++++++++++ ++++++++++ | ||
+ | +++++++++. +++++++. . +++. ---------- | ||
+ | ---------- ---------- ---------- ---------- ---------- | ||
+ | -------. ---------- --. ++++++++++ ++++++++++ | ||
+ | ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ | ||
+ | ++++++++++ +++++++. --------. +++. ------. | ||
+ | --------. ---------- ---------- ---------- ---------- | ||
+ | ---------- ---------- -------. | ||
+ | 1~2行目の3番目のブロックまででメモリの0番地の値を72にして、出力させています。~ | ||
+ | この72はHの文字コードです。~ | ||
+ | 3行目の1番目のブロックまでで、メモリの0番地の値にさらに29を足して、eの文字コードである101を作り、出力しています。~ | ||
+ | (中略)~ | ||
+ | 9行目の3番目のブロックまでで、メモリの0番地の値から67を引いて!の文字コードである33を作り、出力しています。~ | ||
+ | ただ、このやり方はかなりカッコ悪いので、もう少し短いソースでHello, world!と表示させてみます。~ | ||
+ | ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ | ||
+ | ++++++++++ ++++++++++ ++. ++++++++++ ++++++++++ | ||
+ | +++++++++. +++++++. . +++.> ++++++++++ | ||
+ | ++++++++++ ++++++++++ ++++++++++ ++++. ---------- | ||
+ | --.< ++++++++. --------. +++. ------. | ||
+ | --------.> +. | ||
+ | ~ |
(This host) = http://osask.net