HQ9+

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 2. maaliskuuta 2019 tarkistetusta versiosta . tarkastukset vaativat 8 muokkausta .

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 .

Komennot

Yleistä tietoa

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:

Esimerkkejä

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

Toteutukset

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 ; }

Linkit

Muistiinpanot

  1. Runon teksti arkistoitu 27. elokuuta 2008 Wayback Machinessa