HQ9+ 単語

2件

エッチキューナインプラス

3.5千文字の記事
  • twitter
  • facebook
  • はてな
  • LINE

HQ9+とは、どう見てもチューリング完全ではないプログラミング言語である。ネタ言語と解釈されている。

概要

HQ9+はその名に含まれている「H」,「Q」,「9」,「+」の4種類の命のみからなる。Lazy KIota記法のようにたった2種類の命チューリング完全を実現している言語がある中で、HQ9+は4種類の命を持ちながらチューリング完全ではなく、プログラミング言語としては不全であるといえる。

しかし、HQ9+はプログラミング言語で必ずと言っていいほど実装される課題についてはひと通りカバーしている。これは4種類しか命を持たないチューリング不全な言語としては偉業と言ってよいであろう。しかも非常に簡潔に書くことが出来るという長所まで持っているのである。

言語仕様

4つの命は以下のように動作する。

言語の存在意義

言語考案者の言によると、多数の難解プログラミング言語(当然全てマイナー言語である)のサンプルプログラムを調べた結果、ほぼすべてがHello World, Quine, 99 Bottles of Beerの3類に分類できた[1]とのこと[2]。このことから、その3つをハードコーディングすれば複雑な言語仕様なんかいらないんじゃないかと思いついたようである。

そういった観点から見ると、これら難解プログラミング言語(やマイナー言語)の大半が言語仕様の策定とサンプルコードの提示だけで満足して、それ以上のプログラミングレベルに話が進まないことに対する皮であると捉えることもできる。

「H」: Hello, world!

 プログラムの基本といえば、やっぱり"Hello, world!"を出力するプログラム。"Hello, World!"や"Hello world"を出力するというような課題は存在しない、いいね?

アッハイ

H

通常のプログラミング言語では最低でも出力する"Hello, world!"の13文字分の情報ソースコードに含める必要があるし、言語によってはさらに複雑な過程を要する。HQ9+であれば上記のようにたった1文字[3]で書くことが出来るのである。

ね、簡単でしょう?

「Q」: Quine

Quineとは、プログラム自身のソースコードを出力するという課題で、通常のプログラミング言語ではよく例題にされる。QuineHello Worldと違ってどの言語でも非常に高難度であることが多い。

多くのプログラミング言語が苦しめられるこの難題も、HQ9+にとってはたった一文字書くだけで実装できる非常に容易な課題である。

Q

ね、簡単でしょう?

「9」: 99 Bottles of Beer

99 Bottles of Beerで出力される歌詞は以下のようなものである。

99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.

(途中省略

1 bottle of beer on the wall, 1 bottle of beer.
Take one down and pass it around, no more bottles of beer on the wall.

No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.

歌詞を見れば分かるように、通常のプログラミングでは数値を99から1ずつ減らし、各数値を文字列に変換して、数値以外の歌詞連結させながら出力していくことになる。の数が1と0の時は歌詞も変更しなければならない。

for文による繰り返しとif文による条件分岐が使える一般的なプログラミング言語であっても10行30行程度は記述する必要があり、簡単とはいえそれなりに手間を要する[4]繰り返しや条件分岐が実装されていない言語に至っては、繰り返しや条件分岐の実装から行うか、繰り返しの実装をあきらめて長い歌詞全文をソースコードに織り込むしかないという面倒極まりない課題である。

そのような面倒な課題も、HQ9+は繰り返しや条件分岐の仕組みを持たないにもかかわらず、1行どころか下記のたった1文字で解決する。

9

ね、簡単でしょう?

「+」: いらない子?

「H」,「Q」,「9」の意義は上記を読めば分かると思うが、「+」は一体何のためにあるのだろうか。Stack Overflowexitでも一度話題にのぼったようだが、アキュムレータの値を観測することが出来ないので、「+」でアキュムレータを操作することには何の意味もない。公式ページですら「+」については使用例を示していないので相は知りようがないと言える。[5]

従って推測するしかないのだが、おそらくは、HQ9+から「+」をなくしてしまうとHQ9の処理系プログラミング言語インタープリターというよりはコマンドラインツールと呼ぶべきものになってしまうので、プログラミング言語であることを否定されないための免罪符的につけられた機なのではないかと思う。[6]

言語考案者によると、HQ9+のチューリング不全性を摘することはユーモア不足らしいので、「+」についても考えたら負けということかもしれない。

関連リンク

下記リンクによると、この言語を2001年に発表したCliff L. Biffleは言語仕様を発表しただけで、実装開したことはないとのこと。

関連項目

脚注

  1. *同じ出力のプログラムでないと異なる言語間で較できないから、ネタ被りするのは必然ではあるのだが。
  2. *なお、(実用的な言語であれば)HQ9+処理系実装は(Quineよりも)容易なので、多数の言語で実装されている。HQ9+インタープリターがHello World的な課題になる日が来たらHQ9+には自身のインタープリターを起動する命が追加されるのだろうか。
  3. *Hello, world!ソースコードとしてはこれが最短だと思うかもしれない。実際、2001年の発表当時は世界最短でHello, world!が書ける言語だったし、みんなもこれが最短だと思っていた。しかし、現在世界最短は2008年日本人開発したBrainCrashというBrainfuck方言で、BrainCrashではHello, world!を0バイトで記述できる。
  4. *分岐と繰り返しを用いるサンプルプログラムとしては、FizzBuzzの方がメジャーのように思える。にもかかわらずFizzBuzzでなく99 Bottles of Beerが選ばれた背景は不明。だが、大胆に推測するならFizzBuzzは1から100までで書くのがお約束になっているが、明確に定義されているわけではないので「99までと定されたらどうするんだ」といったツッコミを受けやすいからではなかろうか。一方、99 Bottles of Beer は99から始めて0で終了することが決まっているので、ハードコーディングに向いていたとも考えられる。と書いては見たものの、HQ9+が発表された2001年の状況はわからないし、難解プログラミング言語の業界に限れば99 Bottles of BeerexitFizzBuzzexitよりメジャーであった可能性exitも言語考案者の発言からすると十分に考えられる。
  5. *言語考案者は上記の議論を知りつつ何も述べていないので、公式な解答が得られる日は来ないだろう。
  6. *HQ9+にFizzBuzzを加えたHQ9F+という言語がある。この言語では、+でインクリメントされたアキュムレータは"F"でFizzBuzzカウントする回数として使用され、+にも意味が与えられている。しかし、HQ9+が「どうせ使われないんだから使う部分だけのハードコーディングでもいいんじゃないか」という皮を表現しているという当記事の解釈に基づけば、HQ9F+はソフトコーディングできる要素を持ち込んで皮を台しにしていると見ることもできる。
この記事を編集する
流行語100

掲示板

おすすめトレンド

ニコニ広告で宣伝された記事

記事と一緒に動画もおすすめ!
hrdmko&ゲンデンコウ[単語]

提供: レイ・アヤサキ

もっと見る

急上昇ワード改

最終更新:2024/11/30(土) 00:00

ほめられた記事

最終更新:2024/11/29(金) 23:00

ウォッチリストに追加しました!

すでにウォッチリストに
入っています。

OK

追加に失敗しました。

OK

追加にはログインが必要です。

           

ほめた!

すでにほめています。

すでにほめています。

ほめるを取消しました。

OK

ほめるに失敗しました。

OK

ほめるの取消しに失敗しました。

OK

ほめるにはログインが必要です。

タグ編集にはログインが必要です。

タグ編集には利用規約の同意が必要です。

TOP