HQ9+

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 2 mars 2019; kontroller kräver 8 redigeringar .

HQ9+  är ett esoteriskt programmeringsspråk skapat av Cliff Biffle som består av fyra kommandon som vart och ett representerar ett enda tecken : H , Q , 9 och + . Detta språk är inte Turing komplett .

Kommandon

Allmän information

HQ9+ är ett skämtspråk , vars varje kommando är en vanlig uppgift som en nybörjarprogrammerare utför när de lär sig programmera eller när de lär sig ett nytt programmeringsspråk . En vanlig övning är att skriva ett program som skriver ut meddelandet Hej världen! ". Det finns några programmeringsspråk där detta är riktigt svårt att göra, men för HQ9+ är det en rudimentär uppgift, H-kommandot visar detta meddelande. En av de svåraste uppgifterna för många programmeringsspråk är att skapa en quine (ett program som matar ut sin egen kod). På HQ9+ blir dessa uppgifter triviala.

Tolken för HQ9+ är väldigt lätt att skriva, så många av dem har skapats. Till exempel skrevs HQ9+ Python - tolken på cirka 5 minuter och är bara 16 rader lång. Det finns också en översättare skriven i C som översätter HQ9+ källkod till C på bara 40 rader.

Det finns också ett annat skämtprogrammeringsspråk, HQ9++ , även känt som HQ9+ med klasser, en objektorienterad version skapad av David Morgan-mar. Den lägger till ett nytt kommando, ++ , som fördubblar räknaren och skapar ett objekt. I enlighet med principen om att dölja information är det inte möjligt att komma åt detta objekt.

Dessutom finns det HQ9±-språket , i vilket, jämfört med HQ9++, operatorn ' - ' läggs till för att kontrollera programmets korrekthet. Resultaten av kontrollen beror på operatörens plats:

Exempel

Källa Slutsats
H Hej världen!
HQ Hej världen!
HQ
QQQQ QQQQ
QQQQ
QQQQ
QQQQ
Q+Q+Q Q+Q+Q
Q+Q+Q
Q+Q+Q

Implementeringar

Språket är väldigt enkelt att implementera. Följande är implementeringen av tolken i Python.

first_string_pattern = ' {0} {1} öl på väggen, {0} {1} öl.' second_string_pattern = 'Ta ner en och skicka runt den, {} {} öl på väggen.' räknare = 0 källa = ingång () för c i källa : om c == 'H' : print ( 'Hej världen!' ) elif c == 'Q' : print ( källa ) elif c == '9' : för flaska inom intervallet ( 99 , 0 , - 1 ): with_right_postfix = 'flaskor' om flaska != 1 annat 'flaska' tryck ( first_string_pattern . format ( flaska , with_right_postfix )) with_right_postfix = 'flaskor' om flaska - 1 != 1 annat 'flaska' tryck ( second_string_pattern . format . format ( flaska - 1 om flaska - 1 != 0 annat 'inte mer' , with_right_postfix )) print () print ( 'Inga fler flaskor öl på väggen, inga fler flaskor öl.' ) print ( 'Gå till butiken och köp lite till, 99 flaskor öl på väggen.' ) elif c == '+' : räknare += 1 annat : print ( 'Syntaxfel!' )

Implementering i C++ :

#include <iostream> #include <conio.h> använder namnutrymme std ; int main () { system ( "titel HQ9+" ); int count = 0 ; strängkälla ; _ röding ch ; cout << "Källa: " ; cin >> källa ; system ( "cls" ); för ( int i = 0 ; i < källa . storlek (); i ++ ) { ch = källa [ i ]; if ( ch == 'H' ) { cout << "Hej världen!" << endl ; } annat om ( ch == 'Q' ) { cout << källa << endl ; } annat om ( ch == '9' ) { för ( int öl = 99 ; öl > 1 ; öl -- ) { cout << öl << " flaskor öl på väggen, " << öl << " flaskor öl" << endl ; cout << "Ta ner en, skicka den, " << öl - 1 << " flaskor öl på väggen!" << endl ; cout << endl ; } cout << "1 flaska öl på väggen, 1 flaska öl." << endl ; cout << "Ta ner en och skicka runt den, inga fler flaskor öl på väggen." << endl ; cout << endl ; cout << "Inga fler flaskor öl på väggen, inga fler flaskor öl." << endl ; cout << "Gå till affären och köp några till, 99 flaskor öl på väggen." << endl ; } annat om ( ch == '+' ) { räkna ++ ; } annat { cout << "Syntaxfel!" << endl ; } } getch (); returnera 0 ; }

Länkar

Anteckningar

  1. Texten till dikten Arkiverad 27 augusti 2008 på Wayback Machine