本文へスキップ
totonoe.tech

難解プログラミング言語を整える

中級

HQ9+を整える。

= H・Q・9・+ の4命令だけの冗談の言語を、命令ごとの出力で眺める

HQ9+ が初めての方は、先に そもそも HQ9+ とは・なぜ冗談の言語なのか をどうぞ。

サンプル(クリックでエディタに入れる)

プログラム(H Q 9 + 以外の文字は無視されます) 入力するだけ・送信ゼロ

出力

「実行」を押すと、ここに出力が出ます。

命令ごとの動き

見えない箱(アキュムレータ)はこう増えている

左から順に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の「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

運営サイト

私たちが運営するサイト