難解プログラミング言語を整える
中級HQ9+を整える。
= H・Q・9・+ の4命令だけの冗談の言語を、命令ごとの出力で眺める
HQ9+ が初めての方は、先に そもそも HQ9+ とは・なぜ冗談の言語なのか をどうぞ。
サンプル(クリックでエディタに入れる)
出力
「実行」を押すと、ここに出力が出ます。
命令ごとの動き
見えない箱(アキュムレータ)はこう増えている
左から順に1文字ずつ実行した結果です。+ は何も出力しませんが、アキュムレータの値だけが増えます。この値は、プログラムのどこからも読み出せません。
アキュムレータの値(最終)
0
| 順番 | 命令 | 出力されたもの | アキュムレータ |
|---|
そもそも HQ9+ とは
役に立たないことを笑う、4命令の冗談の言語。
HQ9+(エイチキューナインプラス)は、2001年に Cliff L. Biffle が作った言語です。esolangs.org では「冗談の言語」「プログラミングには使えない言語」「出力しかできない言語」に分類されています。
命令は4つだけで、それぞれが「プログラミング言語を紹介するときによく書かれるお題」に1対1で対応しています。H は Hello, world!、Q は自分自身を出すクワイン、9 は「99 Bottles of Beer」の歌詞の出力です。残る + はアキュムレータに1を足すだけで、足した値は読み出せず、画面にも出ません。
なぜ「冗談」と呼ばれるのか
- 入力を受け取る命令がなく、条件分岐も繰り返しもありません。同じプログラムを何度動かしても、出る文字は決まっています。
- この言語で書けるのは、4つのお題の出力だけです。計算の結果を使う方法も用意されていません(+ の値は外から見えません)。
- それでも esolangs.org には、新しい難解言語の上で HQ9+ の処理系を書いてみると、お題のうちクワインを除くものができると示せる、と書かれています。冗談として作られた言語が、新しい言語を試す題材にも使われています。
派生の言語がたくさんある
HQ9+ は小さくて作り替えやすいため、esolangs.org には多くの派生が載っています。たとえば HQ9++(オブジェクト指向を足したもの)、HQ9+~(チューリング完全な拡張)、HQ9F+(FizzBuzz 用の F を足したもの)などです。
ほかのはじめの一歩向けの言語は Deadfish や Brainfuck、一覧は エソラング図鑑の HQ9+ のページで見られます。
早見表
4つの命令(すべてに対応)。
| 命令 | 意味 |
|---|---|
| H | Hello, world! と出力する(1行) |
| Q | 自分自身のソースコードをそのまま出力する(クワイン) |
| 9 | 「99 Bottles of Beer」の歌詞を出力する |
| + | アキュムレータ(数を1つ持つ箱)に1を足す。画面には何も出ない |
資料: esolangs.org: HQ9+、歌詞の形は esolangs.org: 99 bottles of beer(1本のときは bottle、最後は No bottles of beer と、買い足す節つき)。 この実装は、H と Q を小文字(h・q)でも受け付けます(上の資料に「元の説明に小文字の q を含む例があり、大文字小文字を区別しないと考えるのが自然」とあるため)。9 と + 以外の記号・数字・空白は無視します。ソースは5000文字まで、出力は40万文字までで、超えると止めます。送信ゼロ(入力したものはこの端末から出ません)。
このツールについて
命令は H・Q・9・+ の4つだけで、できるのは「Hello, world! を出す」「自分のソースを出す」「99 Bottles of Beer を出す」「見えない箱に1を足す」の4つです。実行して、命令ごとに何が出たかを確かめましょう。
命令が H・Q・9・+ の4つだけの、役に立たないことを笑う冗談の言語。1文字で Hello world、自分のソース、99 Bottles of Beer の歌詞が出ます。見えない箱(アキュムレータ)の増え方も表で確認できます。
主な機能
- H・Q・9・+ の4命令すべてに対応
- 命令ごとの出力とアキュムレータの値を表で表示
- Hello World・自分自身を出す(クワイン)・99 Bottles of Beer のサンプル
- なぜ冗談の言語と呼ばれるかの解説
- 送信ゼロ
よくある質問
Q. HQ9+ の4つの命令は何をしますか?
A. H は Hello, world! を出力、Q は自分自身のソースコードを出力、9 は「99 Bottles of Beer」の歌詞を出力、+ はアキュムレータに1を足します。+ は何も表示しません。
Q. なぜ「冗談の言語」と呼ばれるのですか?
A. 入力を受け取る命令も、条件分岐も、繰り返しもなく、できるのは4つのお題の出力だけだからです。esolangs.org では「冗談の言語」「プログラミングには使えない言語」などに分類されています。
Q. + で足した値はどこで使われますか?
A. どこでも使われません。アキュムレータの値は出力にも命令にも影響しないため、プログラムからは読み出せません。このページでは表で値を見られるようにしています。
Q. 小文字の h や q は使えますか?
A. このページでは使えます。esolangs.org に「元の説明に小文字の q を含む例があり、大文字小文字を区別しないと考えるのが自然」という注記があるためです。9 と + は記号なので区別がありません。
Q. 歌詞はどの形ですか?
A. esolangs.org の「99 bottles of beer」に載る形です。1本のときは bottle、最後は No bottles of beer になり、買い足す節(Go to the store, buy some more)で終わります。
入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。