2: 2009-12-19 (土) 21:05:09 HOSINO |
3: 2009-12-20 (日) 06:47:31 HOSINO |
| **HQ9F+でプログラミング [#ae1e7dc1] | | **HQ9F+でプログラミング [#ae1e7dc1] |
| HQ9F+も、HQ9+と互換性のある言語のひとつです。~ | | HQ9F+も、HQ9+と互換性のある言語のひとつです。~ |
- | HQ9++で書かれたプログラムをip01.g01で実行するときは、~ | + | HQ9F+で書かれたプログラムをip01.g01で実行するときは、~ |
| プロンプト>efg01 ip01 file:ファイル名 type:12 | | プロンプト>efg01 ip01 file:ファイル名 type:12 |
| とコマンドプロンプトに打ち込みます。~ | | とコマンドプロンプトに打ち込みます。~ |
| と表示されます。~ | | と表示されます。~ |
| また、お分かりだと思いますが、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!と表示させてみます。~ |
| + | ++++++++++ ++++++++++ ++++++++++ ++++++++++ ++++++++++ |
| + | ++++++++++ ++++++++++ ++. ++++++++++ ++++++++++ |
| + | +++++++++. +++++++. . +++.> ++++++++++ |
| + | ++++++++++ ++++++++++ ++++++++++ ++++. ---------- |
| + | --.< ++++++++. --------. +++. ------. |
| + | --------.> +. |
| + | ~ |