Přeskočit na obsah

HQ9+

Z Wikipedie, otevřené encyklopedie

HQ9+ je parodický ezoterický programovací jazyk, navržený Cliffem Bifflem. Není turingovsky úplný, ale je vysoce efektivní pro některé základní programátorské úlohy.

HQ9+ je tvořen čtyřmi příkazy, z nichž každý je kódován jedním znakem:

  • Příkaz H vypíše „Hello, world!“.
  • Příkaz Q vypíše zdrojový text programu (a tím umožňuje velmi efektivně napsat krátký program, který vypíše svůj vlastní zdrojový text, tzv. quine).
  • Příkaz 9 vypíše text písně „99 Bottles of Beer on the Wall“. Tato úloha se často používá k ověření, jak elegantně lze skládat v jazyce cykly. Vysoká optimalizace HQ9+ ji umožňuje zvládnout pomocí jednoho znaku.
  • Příkaz + zvýší o jedničku hodnotu akumulátoru.

Příklad programu:

HHQ+HQ++

Tento program vypíše „Hello, world!Hello, world!HHQ+HQ++Hello, world!HHQ+HQ++“ a navíc třikrát inkrementuje akumulátor.

Další verze

[editovat | editovat zdroj]

Existuje objektové rozšíření jazyka, nazývané HQ9++, které vytvořil David Morgan-Mar. To přidává nový, zpětně kompatibilní příkaz ++, který zvýší hodnotu akumulátoru o dvě a navíc vytvoří instanci objektu. V souladu s principem zapouzdření k objektu nelze přistupovat.[1]

Dalším jazykem vycházejícím z původního jazyka je HQ9+- od Ivana Melikampa, které je rozšířením HQ9++. Přidává příkaz -, který má zajišťovat ladění programu a jeho kvalitu kontroly. Tento příkaz vyvolává některé běžné programové chyby v závislosti na tom, na jakém místě se tento příkaz nachází:[2]

  1. Pokud je prvním operátorem, vyvolá syntaktickou chybu.
  2. Pokud mu předchází znak H, vyvolá I/O chybu.
  3. Pokud mu předchází znak Q, dostane se program do nekonečné rekurze.
  4. Pokud mu předchází znak 9, dostane se program do nekonečné smyčky.
  5. Pokud mu předchází znak -, zmenší hodnotu akumulátoru o jedna.
  6. Pokud mu předchází znak +, dělí jedničku nulou, ledaže předchozími znaky byl řetězec ++. V takovém případě vyvolá virtuální výjimku, která sama o sobě je metodou objektu nové podtřídy generické supertřídy. V souladu s principem zapouzdření dat neexistuje způsob jak tuto výjimku zachytit.

CHIQRSX9+ je turing-kompletní verzí původního jazyka, která jej rozšiřuje o další příkazy. Vytvořil ji Ørjan Johansen 3.–5. dubna 2002.[3] Přidává tyto příkazy:

  • Příkaz C zkopíruje vstup na výstup.
  • Příkaz I interpretuje vstup jako zdrojový kód programu napsaného v CHIQRSX9+.
  • Příkaz R zakóduje vstup pomocí ROT13.
  • Příkaz S seřadí vstupní řádky.
  • Příkaz X udělá jazyk turing-kompletním, přičemž není definováno, jak toho má být dosaženo. V každé implementaci se přesná funkce tedy může lišit. V té původní se přidá ke každému písmenu náhodné číslo a spustí tato instrukce v jazyce Perl. V jiné se přidá ke každému písmenu číslo 7 a opět spustí instrukce v Perlu.[4]

Jazyk H9+ je totožný s jazykem HQ9+ s tím rozdílem, že je vypuštěn příkaz Q. Pro zachování stejné funkcionality je každý znak jiný než H, 9 nebo + ignorován. Pro vytvoření quine je potřeba například následný zdrojový kód:

Hello, world!

Jazyk HQ9+2D obsahuje oproti originální verzi ještě čtyři příkazy ^, v , > a < které slouží k posunu čítače instrukcí daným směrem. Ten začíná na prvním bajtu programu a jeho posunem je možné přeskakovat příkazy, nebo se k nim vracet. Program po skoku pokračuje normálně z cíle skoku, čili nevrací se na původní místo skoku.

HQ9F+ a FHQ9+-

[editovat | editovat zdroj]

Tyto dva jazyky přidávají operátor F, který vypíše čísla od 1 do 100 s tím, že čísla dělitelná třemi nahradí Fizz a čísla dělitelná pěti Buzz. Obě varianty se liší pouze přítomností nebo absencí operátoru -.[5]

Extrémně minimalistická varianta, kde existuje pouze příkaz +. Ostatní znaky jsou ignorovány.[6]

Tato varianta má místo příkazu Q příkaz I, lišící se v tom, že funguje pouze u interpretované varianty. U kompilované varianty vypíše „I can't bel1eve 1t's not qu1ne!“[7]

  1. DAVID, Morgan-Mar. HQ9++ [online]. [cit. 2011-07-23]. Dostupné online. (anglicky)
  2. MELIKAMP, Ivan. HQ9+- [online]. 2007-01-12 [cit. 2011-07-23]. Dostupné online. (anglicky)
  3. chiqrsx9+.pl, zdrojový kód intrepretru v němž byl jazyk definován Ørjanem Johansenem
  4. CHIQRSX9+ - Esolang. esolangs.org [online]. [cit. 2026-03-03]. Dostupné online.
  5. HQ9+ - Esolang. esolangs.org [online]. [cit. 2026-03-03]. Dostupné online.
  6. HQ9+ - Esolang. esolangs.org [online]. [cit. 2026-03-03]. Dostupné online.
  7. HI9+ - Esolang. esolangs.org [online]. [cit. 2026-03-03]. Dostupné online.

Externí odkazy

[editovat | editovat zdroj]