HQ9+ on Cliff Bifflen luoma esoteerinen ohjelmointikieli , joka koostuu neljästä komennosta , joista jokainen edustaa yhtä merkkiä : H , Q , 9 ja + . Tämä kieli ei ole Turingin valmis .
HQ9+ on vitsikieli , jonka jokainen komento on yhteinen tehtävä , jonka aloitteleva ohjelmoija suorittaa opiskellessaan ohjelmointia tai oppiessaan uutta ohjelmointikieltä . Yleinen harjoitus on kirjoittaa ohjelma, joka tulostaa viestin Hello, world! ". Joissakin ohjelmointikielissä tämä on todella vaikeaa, mutta HQ9+:lle se on alkeellinen tehtävä, H-komento näyttää tämän viestin. Yksi monien ohjelmointikielien vaikeimmista tehtävistä on luoda quine (ohjelma, joka tulostaa oman koodinsa). HQ9+:ssa näistä tehtävistä tulee triviaaleja.
HQ9+ :n tulkki on erittäin helppo kirjoittaa, joten niitä on luotu paljon. Esimerkiksi HQ9+ Python - tulkki kirjoitettiin noin 5 minuutissa ja on vain 16 riviä pitkä. On myös C -kielellä kirjoitettu kääntäjä, joka kääntää HQ9+-lähdekoodin C:ksi vain 40 rivillä.
On myös toinen vitsi-ohjelmointikieli, HQ9++ , joka tunnetaan myös nimellä HQ9+ luokkineen , David Morgan-marin luoma olioversio . Se lisää uuden komennon, ++ , joka kaksinkertaistaa laskurin ja luo objektin. Tietojen piilottamisen periaatteen mukaisesti pääsy tähän kohteeseen ei ole mahdollista.
Lisäksi on olemassa HQ9± -kieli , jossa HQ9++:aan verrattuna lisätään operaattori ' - ' ohjelman oikeellisuuden tarkistamiseksi. Tarkistuksen tulokset riippuvat operaattorin sijainnista:
Lähde | Johtopäätös |
---|---|
H | Hei maailma! |
HQ | Hei maailma! HQ |
QQQQ | QQQQ QQQQ QQQQ QQQQ |
Q+Q+Q | Q+Q+Q Q+Q+Q Q+Q+Q |
Kieli on hyvin yksinkertainen toteuttaa. Seuraavassa on tulkin toteutus Pythonissa.
first_string_pattern = ' {0} {1} olutta seinällä, {0} {1} olutta.' second_string_pattern = 'Ota yksi alas ja vie se ympäri, {} {} olutta seinällä.' laskuri = 0 lähde = tulo () c :lle lähteessä : if c == ' H' : tulosta ( 'Hei maailma!' ) elif c == 'Q' : tulosta ( lähde ) elif c == ' 9 ' : pullolle alueella ( 99 , 0 , - 1 ): with_right_postfix = 'pullot' jos pullo != 1 else 'pullo' print ( first_string_pattern . format ( pullo , with_right_postfix )) with_right_postfix = 'pullot' jos pullo - 1 != 1 else 'pullo ' tuloste ( second_string_pattern . ( pullo - 1 jos pullo - 1 != 0 else 'ei enää' , with_right_postfix )) print () print ( 'Ei enää olutpulloja seinällä, ei enää olutpulloja.' ) print ( 'Mene kauppaan ja osta lisää, 99 pulloa olutta seinällä.' ) elif c == '+' : laskuri += 1 else : print ( 'Syntaksivirhe!' )Toteutus C++ :ssa :
#include <iostream> #include <conio.h> käyttäen nimiavaruutta std ; int main () { järjestelmä ( "title HQ9+" ); int count = 0 ; merkkijono lähde ; char ch ; cout << "Lähde:" ; cin >> lähde ; system ( "cls" ); for ( int i = 0 ; i < lähde . koko (); i ++ ) { ch = lähde [ i ]; jos ( ch == 'H' ) { cout << "Hei, maailma!" << endl ; } else if ( ch == 'Q' ) { cout << lähde << endl ; } else if ( ch == '9' ) { for ( int olut = 99 ; olut > 1 ; olut -- ) { cout << olut << " olutpulloja seinällä, " << olut << " olutpulloja" << endl ; cout << "Ota yksi alas, vie se ympäriinsä, " << olut - 1 << " pullo olutta seinällä!" << endl ; cout << endl ; } cout << "1 pullo olutta seinällä, 1 pullo olutta." << endl ; cout << "Ota yksi alas ja vie se ympäriinsä, ei enää olutpulloja seinällä." << endl ; cout << endl ; cout << "Ei enää olutpulloja seinällä, ei enää olutpulloja." << endl ; cout << "Mene kauppaan ja osta lisää, 99 pulloa olutta seinällä." << endl ; } else if ( ch == '+' ) { laskea ++ ; } muuta { cout << "Syntaksivirhe!" << endl ; } } saada (); paluu 0 ; }Ohjelmointikielet | |
---|---|
|