HQ9+

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 2 martie 2019; verificările necesită 8 modificări .

HQ9+  este un limbaj de programare ezoteric creat de Cliff Biffle care constă din patru comenzi , fiecare reprezentând un singur caracter : H , Q , 9 și + . Acest limbaj nu este Turing complet .

Comenzi

Informații generale

HQ9+ este un limbaj de glumă , a cărui comandă este o sarcină comună pe care o îndeplinește un programator începător atunci când învață să programeze sau când învață un nou limbaj de programare . Un exercițiu obișnuit este să scrieți un program care imprimă mesajul Hello, world! ". Există unele limbaje de programare în care acest lucru este cu adevărat dificil de făcut, totuși pentru HQ9+ este o sarcină rudimentară, comanda H va afișa acest mesaj. Una dintre cele mai dificile sarcini pentru multe limbaje de programare este crearea unui quine (un program care scoate propriul cod). Pe HQ9+ aceste sarcini devin triviale.

Interpretul pentru HQ9+ este foarte ușor de scris, așa că multe dintre ele au fost create. De exemplu, interpretul HQ9+ Python a fost scris în aproximativ 5 minute și are doar 16 rânduri. Există și un traducător scris în C care traduce codul sursă HQ9+ în C în doar 40 de rânduri.

Există și un alt limbaj de programare jokey, HQ9++ , cunoscut și sub numele de HQ9+ cu clase, o versiune orientată pe obiecte creată de David Morgan-mar. Adaugă o nouă comandă, ++ , care dublează contorul și creează un obiect. În conformitate cu principiul ascunderii informațiilor, accesul la acest obiect nu este posibil.

În plus, există limbajul HQ9± , în care, în comparație cu HQ9++, se adaugă operatorul ' - ' pentru a verifica corectitudinea programului. Rezultatele verificării depind de locația operatorului:

Exemple

Sursă Concluzie
H Salut Lume!
HQ Salut Lume!
HQ
QQQQ QQQQ
QQQQ
QQQQ
QQQQ
Q+Q+Q Q+Q+Q
Q+Q+Q
Q+Q+Q

Implementări

Limbajul este foarte simplu de implementat. Urmează implementarea interpretului în Python.

first_string_pattern = ' {0} {1} de bere pe perete, {0} {1} de bere.' second_string_pattern = 'Luați una jos și dați-o, {} {} de bere pe perete.' contor = 0 sursa = intrare () pentru c în sursă : dacă c == 'H' : print ( 'Bună lume!' ) elif c == 'Q' : print ( sursă ) elif c == '9' : pentru sticla în interval ( 99 , 0 , - 1 ): with_right_postfix = 'sticle' dacă sticla != 1 else 'sticlă' tipărit ( first_string_pattern . format ( sticla , cu_right_postfix )) with_right_postfix = 'sticle' dacă sticla - 1 != 1 else 'sticlă' tipărit ( second_string_pattern . format . ( sticla - 1 dacă sticla - 1 != 0 else 'nu mai mult' , with_right_postfix )) print () print ( 'Fără sticle de bere pe perete, nu mai sticle de bere.' ) print ( 'Mergi la magazin și mai cumpără niște, 99 de sticle de bere pe perete.' ) elif c == '+' : counter += 1 else : print ( 'Eroare de sintaxă!' )

Implementare în C++ :

#include <iostream> #include <conio.h> folosind namespace std ; int main () { sistem ( "titlu HQ9+" ); număr int = 0 ; sursă șir de caractere ; char ch ; cout << "Sursa: " ; cin >> sursa ; sistem ( "cls" ); pentru ( int i = 0 ; i < sursă . dimensiune (); i ++ ) { ch = sursa [ i ]; dacă ( ch == 'H' ) { cout << "Bună, lume!" << endl ; } else if ( ch == 'Q' ) { cout << sursa << endl ; } else if ( ch == '9' ) { pentru ( int bere = 99 ; bere > 1 ; bere -- ) { cout << bere << " sticle de bere pe perete, " << bere << " sticle de bere" << endl ; cout << "Luați una jos, dați-o, " << bere - 1 << " sticle de bere pe perete!" << endl ; cout << endl ; } cout << "1 sticlă de bere pe perete, 1 sticlă de bere." << endl ; cout << "Luați unul jos și dați-l în jur, fără sticle de bere pe perete." << endl ; cout << endl ; cout << "Fără sticle de bere pe perete, fără sticle de bere." << endl ; cout << "Du-te la magazin și mai cumpără niște, 99 de sticle de bere pe perete." << endl ; } else if ( ch == '+' ) { numără ++ ; } altfel { cout << "Eroare de sintaxă!" << endl ; } } getch (); returnează 0 ; }

Link -uri

Note

  1. Textul poeziei Arhivat 27 august 2008 la Wayback Machine