リポジトリ / emssr / independent_common_compiler
r2
| r2 emssr | 1 | # referenceとは呼べない程度の備忘録 |
| r2 emssr | 2 | |
| r2 emssr | 3 | Common言語にしろコモン公用語にしろ、根底にあるのは数学で、5みたいな小さい自然数を定義するのにすら |
| r2 emssr | 4 | |
| r2 emssr | 5 | """ |
| r2 emssr | 6 | hu hu hu hu hu ka, no ka, no ka, no ka, no ka. |
| r2 emssr | 7 | |
| r2 emssr | 8 | hu ka, he ka, no ka, he ka, no ka, hu ka, no ka. |
| r2 emssr | 9 | |
| r2 emssr | 10 | hu ka, hu ka, no ka, he ka, no ka. hu ka, no ka. |
| r2 emssr | 11 | |
| r2 emssr | 12 | hu ka, he ka, no ka, he ka, no ka, ki hu ka, no ka. |
| r2 emssr | 13 | """ |
| r2 emssr | 14 | |
| r2 emssr | 15 | など、複数の解法がある。 |
| r2 emssr | 16 | |
| r2 emssr | 17 | これだけだとこの語彙が何を言っているか?は分かりにくいが、下に説明すると: |
| r2 emssr | 18 | |
| r2 emssr | 19 | hu : 最初に書く「1」。 |
| r2 emssr | 20 | この1を操作する。基本的にこれがないとプログラムは始まらない。 |
| r2 emssr | 21 | |
| r2 emssr | 22 | he : コピー。 |
| r2 emssr | 23 | 与えられた語の値の順番の語をコピーしてw[0]に値を置く。 |
| r2 emssr | 24 | |
| r2 emssr | 25 | ka : 句読点。 |
| r2 emssr | 26 | 操作を区切る。これがあって操作を区切ることができる(逆に言えば、無ければ区切られない)。 |
| r2 emssr | 27 | |
| r2 emssr | 28 | no : 加算。 |
| r2 emssr | 29 | 加算の操作。二つの対象があって初めて適用可能(当然ながら)。 |
| r2 emssr | 30 | |
| r2 emssr | 31 | ha : 負にする・裏返す。 |
| r2 emssr | 32 | 実はコモン公用語において引き算は存在しない。引き算をしたいなら、引く数を裏返す必要がある。hukahakaなら-1を作るだけ。 |
| r2 emssr | 33 | |
| r2 emssr | 34 | mu : 書き込み・左の語番号に右の値を書き込む。 |
| r2 emssr | 35 | 上に今まで挙がった中で唯一の左右による作用の違いを持つ単語。左の値で定義された語を右の値の語に書き込む。つまり、 **右の値が語の番号。左の単語は語の中身** になる。普通のプログラミングっぽく言えば、右がメモリアドレス。左が値。まぁそんな単純な話ではもちろんないんだけど...。 |
| r2 emssr | 36 | それと、できるだけ1とかあまりにも小さい語を指定すべきではない。プログラムにも寄るけど、基本的に小さい語は新しい語の定義に一時的に使う。大きい語を一時メモリに使おう。 |
| r2 emssr | 37 | |
| r2 emssr | 38 | me : 成功報告・C言語のreturn 0みたいなやつ。 |
| r2 emssr | 39 | frontierが空っぽのまま実行終了したいときに必要な単語。 |
| r2 emssr | 40 | |
| r2 emssr | 41 | mi : 非破壊読み出し・語番号を作る。 |
| r2 emssr | 42 | Common言語で状態を読み出す唯一の方法。入力は語番号で、中身の語を返す。非破壊読み出し。 |
| r2 emssr | 43 | |
| r2 emssr | 44 | hi : 比較器 |
| r2 emssr | 45 | 左の語の値が右の語の値より小さければ1、左の語の値が右の語の値より大きければ0。 |
| r2 emssr | 46 | |
| r2 emssr | 47 | mo : 忘れる・語の値を捨てる |
| r2 emssr | 48 | frontierをw[0]に戻す。 |
| r2 emssr | 49 | |
| r2 emssr | 50 | 区切りがなければ操作は適用されるため、こういうトリッキーなこともできる: |
| r2 emssr | 51 | |
| r2 emssr | 52 | すべての hu ka 。つまり1をまとめるためにnoを多重につける。 |
| r2 emssr | 53 | hu ka, hu ka, hu ka, hu ka, hu ka, hu ka, hu ka, no no no ka, no no ka, no ka. |
| r2 emssr | 54 | = 7 |
| r2 emssr | 55 | |
| r2 emssr | 56 | 最後のno kaをなくしてみる。 |
| r2 emssr | 57 | hu ka, hu ka, hu ka, hu ka, hu ka, hu ka, hu ka,no no no ka, no no ka. |
| r2 emssr | 58 | = 4, 3 |
| r2 emssr | 59 | |
| r2 emssr | 60 | no no ka も消す。 |
| r2 emssr | 61 | hu ka, hu ka, hu ka, hu ka, hu ka, hu ka, hu ka,no no no ka. |
| r2 emssr | 62 | = 2, 2, 2, 1 |
| r2 emssr | 63 | |
| r2 emssr | 64 | 1が残っていてきしょいので、7個のhu ka 定義のうち最後のhu kaを一つ消して6個にする。 |
| r2 emssr | 65 | hu ka, hu ka, hu ka, hu ka, hu ka, hu ka,no no no ka. |
| r2 emssr | 66 | |
| r2 emssr | 67 | 8を作ってから1 = hu kaを裏返して引いてみる。ついでにhu ka を8つ定義するためのkaを省略する。 |
| r2 emssr | 68 | |
| r2 emssr | 69 | hu hu hu hu hu hu hu hu ka, no no no no ka, no no ka, no ka. |
| r2 emssr | 70 | |
| r2 emssr | 71 | hu ka, ha ka. no ka. |
| r2 emssr | 72 | |
| r2 emssr | 73 | 同じことを、8を作るうえで8つバカ正直に1を定義するのは愚かなので、文明人らしく2進数風に書いてみる。 |
| r2 emssr | 74 | |
| r2 emssr | 75 | hu ka, he ka, no ka, he ka, no ka, he ka, no ka. |
| r2 emssr | 76 | |
| r2 emssr | 77 | hu ka, ha ka. no ka. |
| r2 emssr | 78 | |
| r2 emssr | 79 | 天邪鬼なことに、-8をつくってから戻して計算する。 |
| r2 emssr | 80 | |
| r2 emssr | 81 | hu ka, ha ka, he ka, no ka, he ka, no ka, he ka, no ka. |
| r2 emssr | 82 | |
| r2 emssr | 83 | hu ka. no ka, ha ka. |
| r2 emssr | 84 | |
| r2 emssr | 85 | brainfuck言語みがあるのは確かにそう...。 |
| r2 emssr | 86 |