Quine (Computerwissenschaft)

Ein quine ist ein Computerprogramm, das keinen Eingang nimmt und eine Kopie seines eigenen Quellcodes als seine einzige Produktion erzeugt. Die Standardbegriffe für diese Programme in der Berechenbarkeitstheorie und Informatik-Literatur selbstwiederholen Programme, Programme wieder selbsthervorbringend, und Programme selbstkopierend.

Ein quine ist ein fester Punkt einer Ausführungsumgebung, wenn die Ausführungsumgebung als eine Funktion angesehen wird. Quines sind auf jeder Programmiersprache möglich, die zur Produktion jede berechenbare Schnur als eine direkte Folge des recursion Lehrsatzes von Kleene in der Lage ist. Für die Unterhaltung versuchen Programmierer manchmal, den kürzestmöglichen quine auf jeder gegebenen Programmiersprache zu entwickeln.

Auf einigen Sprachen ist eine leere Quelldatei ein fester Punkt der Sprache, keine Produktion erzeugend. Solch ein leeres Programm, vorgelegt als "das kleinste in der Welt selbst sich vermehrendes Programm", einmal hat den "schlechtesten Missbrauch der Regeln" Preis im Verfinsterten C-Streit gewonnen.

Geschichte

Die Idee, Programme wieder selbsthervorzubringen, ist zuerst in Paul Bratley und dem Artikel "Computer Recreations: Self-Reproducing Automata" von Jean Millo 1972 erschienen.

Bratley ist zuerst interessiert für sich selbstvermehrende Programme nach dem Sehen des ersten bekannt solches Programm geworden, das im Atlas-Autocode an Edinburgh in den 1960er Jahren durch die Universität des Edinburgher Vortragenden und Forschers Hamish Dewar geschrieben ist. Dieses Programm erscheint unten:

%BEGIN

! DAS IST EIN SICH SELBSTVERMEHRENDES PROGRAMM

%ROUTINESPEC R

R

DRUCKSYMBOL (39)

R DRUCKSYMBOL (39)

NEWLINE

%CAPTION %END~

%CAPTION %ENDOFPROGRAM~

%ROUTINE R

%PRINTTEXT'

%BEGIN ! DAS IST EIN SICH SELBSTVERMEHRENDES PROGRAMM %ROUTINESPEC R R DRUCKSYMBOL (39) R DRUCKSYMBOL (39) NEWLINE %CAPTION %END~ %CAPTION %ENDOFPROGRAM~ %ROUTINE R %PRINTTEXT'

%END

%ENDOFPROGRAM

Der Name "quine" wurde von Douglas Hofstadter, in seinem populären Wissenschaftsbuch, in der Ehre des Philosophen Willard Van Orman Quine (1908-2000) ins Leben gerufen, wer eine umfassende Studie der indirekten Selbstverweisung, und insbesondere für den folgenden Paradox erzeugenden Ausdruck gemacht hat, der als das Paradox von Quine bekannt ist:

"Ertrag-Lüge, wenn vorangegangen, durch seinen Kostenvoranschlag" gibt Lüge, wenn vorangegangen, durch seinen Kostenvoranschlag nach.

Beispiel

Der folgende javanische Code demonstriert die grundlegende Struktur eines quine.

{\

öffentliche statische leere Hauptsache (Schnur [] args)

{\

Rotforelle q = 34;//Anführungszeichen-Charakter

Schnur [] l = {//Reihe der Quelle codiert

"öffentliche Klasse Quine",

"{",

"öffentliche statische leere Hauptsache (Schnur [] args)",

"{",

"Rotforelle q = 34;//Anführungszeichen-Charakter",

"Schnur [] l = {//Reihe des Quellcodes",

"",

"};",

"für (interne Nummer i = 0; ich

Der Quellcode enthält eine Schnur-Reihe von sich, der Produktion zweimal einmal innerhalb von Anführungszeichen ist.

Multiquines

Das quine Konzept kann zu vielfachen Niveaus oder recursion erweitert werden, hervorbringend, was multiquines, oder "ouroboros Programme" genannt worden ist.

Beispiel

Dieses javanische Programm Produktionen die Quelle für einen C ++ Programm dass Produktionen der ursprüngliche javanische Code.

  1. einschließen
einschließen

das Verwenden namespace std;

int Hauptsache (interne Nummer argc, char* argv [])

{\

Rotforelle q = 34;

spannen Sie l [] = {\

"",

"=============

"#include

"#include

"mit namespace std;",

"",

"int Hauptsache (interne Nummer argc, char* argv [])",

"{",

"Rotforelle q = 34;",

"spannen Sie l [] = {",

"};",

"für (interne Nummer i = 21; ich

"öffentliche Klasse Quine", "{", "öffentliche statische leere Hauptsache (Schnur [] args)", "{", "Rotforelle q = 34;",

"Schnur [] l = {",

"};",

"für (interne Nummer i = 2; ich

{\ öffentliche statische leere Hauptsache (Schnur [] args) {\ Rotforelle q = 34;

Schnur [] l = {\

"", "============= "#include "#include "mit namespace std;", "", "int Hauptsache (interne Nummer argc, char* argv [])", "{", "Rotforelle q = 34;", "spannen Sie l [] = {", "};", "für (interne Nummer i = 21; ich "öffentliche Klasse Quine", "{", "öffentliche statische leere Hauptsache (Schnur [] args)", "{", "Rotforelle q = 34;", "Schnur [] l = {", "};",

"für (interne Nummer i = 2; ich

Solche Programme sind mit verschiedenen Zyklus-Längen erzeugt worden:

Siehe auch

  • Diagonales Lemma
  • Fester Punkt combinator
  • Selbstdolmetscher
  • Das Selbstwiederholen der Maschine
  • Selbsterwiderung
  • Die Selbstverweisungsformel von Tupper
  • Programmiersprachen
  • Graue Schmiere

Weiterführende Literatur

Links


Quant-Elektrodynamik / Feld von Bruchteilen
Impressum & Datenschutz