Quine (programare)

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 3 februarie 2021; verificările necesită 2 modificări .

Quine ( quine , engleză  quine ) este un program de calculator care produce o copie exactă a textului său sursă . În același timp, programele care folosesc date externe (citirea textului programului dintr-un fișier, introducerea lui de la tastatură și așa mai departe) nu sunt considerate chine. În plus, un „program” care nu conține deloc cod (cazul degenerat) nu este considerat o chină.

În cartea „ Etudes for Programers ” de Charles Weatherell , se formulează o condiție mai strictă: programul nu trebuie să folosească trucuri care să permită accesul la codul său sursă stocat în memoria încărctorului sau interpretului. Prin urmare, Quines 10 LISTîn BASIC  și în SOURCE TYPElimbajul Forth  nu sunt pe deplin sinceri.

Termenul a fost numit după logicianul și filozoful american Willard Van Orman Quine (1908-2000 ) , care a fost angajat într-un studiu aprofundat al auto - referinței indirecte . 

Istorie

Quines sunt posibile în orice limbaj de programare Turing-complet - ca o consecință a teoremei recursiei lui Kleene . Ideea Quine a fost descrisă pentru prima dată de Paul Bratley ( ing.  Bratley, Paul ) și Jean Millo ( ing.  Millo, Jean ) în „Computer Recreations; Self-Reproducing Automata, Software - Practice & Experience, Numărul 2 (1972), p. 397-400. Bratley a devenit interesat de programele cu auto-reproducere după ce a văzut primul astfel de program scris în limbajul de programare Atlas Autocode în Edinburgh în anii 1960 de profesorul și cercetătorul Hamish Dewar . 

Iată codul sursă pentru acest program:

%ÎNCEPE !ACESTA ESTE UN PROGRAM DE AUTOREPRODUCERE %ROUTINESPEC R R IMPRIMARE SYMBOL(39) R IMPRIMARE SYMBOL(39) LINIE NOUĂ %CAPTION %END~ %CAPTION %ENDOFPROGRAM~ %ROUTINER %PRINTTEXT ' %ÎNCEPE !ACESTA ESTE UN PROGRAM DE AUTOREPRODUCERE %ROUTINESPEC R R IMPRIMARE SYMBOL(39) R IMPRIMARE SYMBOL(39) LINIE NOUĂ %CAPTION %END~ %CAPTION %ENDOFPROGRAM~ %ROUTINER %PRINTTEXT ' %SFÂRŞIT %ENDOFPROGRAM

Variante

Quine n -a ordine

Un Quine de ordinul al n-lea pentru este un program care afișează cod astfel încât rularea codului să afișeze codul . În acest caz, codul afișează pe ecran codul programului original.

Chain Quine

Un lanț pentru o listă de limbaje de programare este un astfel de cod în limbaj încât, atunci când toate codurile sunt executate pe rând, codul din limbaj scoate un cod arbitrar în limbaj . În același timp, codul în limba generat ca urmare a pașilor afișează codul original în limba .

Programatorul japonez Yusuke Endo a creat în 2013 un lanț chine pentru începerea în limbajul de programare Ruby (totuși, conform definiției, datorită naturii ciclice a algoritmului, dacă există coduri în toate limbile, puteți începe execuția ciclu de la oricare dintre ele). Limbajele de programare din Quine sunt aranjate în ordine alfabetică. Până în 2018, el a adus numărul de limbi din această chină la 128 [1] .

Alte variante

Yusuke Endo a creat și o pseudoquină în Ruby care își afișează textul folosind pseudoanimație (desenând noi combinații de caractere pe consolă la un interval dat).

De asemenea, formula autoreferențială a lui Tupper poate fi considerată un fel de variație matematică a lui Quine  - o inegalitate ale cărei puncte de adevăr într-o anumită zonă a planului desenează aceeași formulă.

Vezi și

Note

  1. Codul sursă al chininei Yusuke Endo . Data accesului: 19 iulie 2013. Arhivat din original pe 21 august 2013.

Literatură