<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Quine_%28Computerprogramm%29</id>
	<title>Quine (Computerprogramm) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Quine_%28Computerprogramm%29"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Quine_(Computerprogramm)&amp;action=history"/>
	<updated>2026-05-19T13:18:17Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Quine_(Computerprogramm)&amp;diff=97910&amp;oldid=prev</id>
		<title>~2026-15034-40: /* Beispiele */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Quine_(Computerprogramm)&amp;diff=97910&amp;oldid=prev"/>
		<updated>2026-03-10T00:07:55Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Beispiele&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Ein &amp;#039;&amp;#039;&amp;#039;Quine&amp;#039;&amp;#039;&amp;#039; ist eine Art von [[Computerprogramm]], das eine Kopie seiner selbst (üblicherweise seines [[Quelltext]]es) als Ausgabe schreibt. Es handelt sich somit um eine Form der [[Selbstbezüglichkeit]].&lt;br /&gt;
&lt;br /&gt;
[[Hacker]] und [[Geek]]s sehen es als sportliche Herausforderung, die kleinstmöglichen Quines in [[Programmiersprache]]n ihrer Wahl zu erstellen (siehe [[International Obfuscated C Code Contest|IOCCC]]).&lt;br /&gt;
&lt;br /&gt;
Quines sind nach dem Logiker und Philosophen [[Willard Van Orman Quine]] benannt.&lt;br /&gt;
&lt;br /&gt;
== Konstruktion von Quines ==&lt;br /&gt;
=== Frage dich selbst ===&lt;br /&gt;
Ein Quine ließe sich in einem [[C (Programmiersprache)|C]]-ähnlichen Pseudo-Code so schreiben&amp;lt;ref&amp;gt;Craig S. Kaplan: &amp;#039;&amp;#039;[http://www.cgl.uwaterloo.ca/~csk/washington//paper/index.html The Search For Self-Documenting Code]&amp;#039;&amp;#039;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
main() {&lt;br /&gt;
    print myself out.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Üblicherweise werden C-Programme [[Compiler|übersetzt]], d.&amp;amp;nbsp;h. die [[Laufzeit (Informatik)|Laufzeitversion]] des Programms liegt in [[Maschinensprache]] vor (Repräsentation als Folge von [[Byte]]s, abgespeichert in einer sogenannten binären Datei), seine ursprüngliche Repräsentation ist jedoch in der Regel ein [[American Standard Code for Information Interchange|ASCII]]-codierter Quelltext, der zudem noch in einer anderen Datei abgelegt ist.&lt;br /&gt;
Der für diesen Ansatz zur Implementierung eines Quines benötigte Zugriff auf die eigene Repräsentation (&amp;#039;&amp;#039;myself&amp;#039;&amp;#039;) wäre also sehr kompliziert.&lt;br /&gt;
&lt;br /&gt;
Weiter fordert man für ein Quine, dass es abgeschlossen ist:&lt;br /&gt;
&lt;br /&gt;
* Es soll ohne Zugriff auf externe Daten auskommen, womit auch der Zugriff auf die eigene Quelltextdatei ausgeschlossen ist.&lt;br /&gt;
* Ebenso soll der wesentliche Code im Quine selbst vorhanden sein, weshalb externe Funktionen nur spärlich genutzt werden sollen, die Bibliotheksfunktion &amp;#039;&amp;#039;ein Zeichen ausgeben&amp;#039;&amp;#039; etwa ist noch zulässig.&lt;br /&gt;
&lt;br /&gt;
Nur wenige Sprachen unterstützen Selbstbezüglichkeit ([[Reflexion (Programmierung)|Reflexion]]) in der Form, dass ein Programm dieser Sprache Zugriff auf seine eigene Repräsentation hat.&lt;br /&gt;
&lt;br /&gt;
Eine [[Interpreter|interpretierte]] Programmiersprache, wie zum Beispiel [[Perl (Programmiersprache)|Perl]] oder [[Python (Programmiersprache)|Python]], hätte es prinzipiell leichter, da man die vom Interpreter benötigte Repräsentation des auszuführenden Programms auch dem selbigen verfügbar machen könnte, aber in der Regel wird das nicht unterstützt, zum Beispiel aus Sicherheitsgründen, oder weil die Designer der Sprache nicht so weit gehen wollten (zum Beispiel weil [[selbstmodifizierender Code]] abgelehnt wird).&lt;br /&gt;
Meist ist dem Programm dort nicht viel mehr Reflexion möglich, als seinen Namen und die Namen seiner Variablen und Funktionen vom Laufzeitsystem zu erfahren.&lt;br /&gt;
&lt;br /&gt;
Reflexion führt daher in den meisten Programmiersprachen nicht zu einem korrekten Quine.&lt;br /&gt;
&lt;br /&gt;
=== Code als Daten ===&lt;br /&gt;
Die meisten Programmiersprachen bieten wenig Hilfe, Programme angemessen intern zu repräsentieren und mit diesen Repräsentationen zu arbeiten:&lt;br /&gt;
&lt;br /&gt;
* sie zu analysieren ([[Parser|Parsen]]),&lt;br /&gt;
* aus vorhandenen Repräsentationen neue Programme zu erzeugen ([[Komposition (UML)|Komposition]]) und insbesondere&lt;br /&gt;
* das repräsentierte Programm auszuführen ([[Auswertung (Informatik)|Applikation]]).&lt;br /&gt;
&lt;br /&gt;
Ein bekanntes Anwendungsbeispiel wäre ein [[Funktionsplotter]], das ist ein Programm zum [[Plotter|Plotten]] der [[Funktionsgraph|Graphen]] beliebiger mathematischer Funktionen.&lt;br /&gt;
&lt;br /&gt;
Mit anderen Worten:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Für Funktionen gibt es in vielen Programmiersprachen keinen angemessenen Datentyp mit entsprechenden Operationen.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
In C kann man ein Stück Programmcode in einer [[Zeichenkette]] ablegen, man kann aber wenig damit anfangen, denn dieser ist mit den Mitteln von C nur aufwendig zu analysieren und auszuführen.&lt;br /&gt;
Man muss dann zu komplexen verpointerten Strukturen und externen Bibliotheken greifen.&lt;br /&gt;
&lt;br /&gt;
Ein positives Beispiel ist [[LISP]], weil diese Sprache Quellcode im algebraischen Datentyp &amp;#039;&amp;#039;Liste&amp;#039;&amp;#039; darstellt, den sie auch selbst hauptsächlich verwendet ([[Homoikonizität]]).&lt;br /&gt;
&lt;br /&gt;
=== Quinierung ===&lt;br /&gt;
Die obigen Ausführungen haben die Schwierigkeit aufgeführt, die ein Programm hat, falls es seine eigene Struktur erfragen will. Dennoch muss es auch in C möglich sein, einen Quine zu realisieren (siehe die Ausführungen zur Existenz von Quines im Theorieteil). Dazu wird folgende Technik verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Wenn man die eigene Struktur nicht erfragen kann, muss man sie von vornherein wissen.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Man entwirft das Programm in zwei Teilen, in einen, den man den Code nennt, und einen, den man die Daten nennt. Die Daten repräsentieren den Code (bzw. seine Textform) und sie sind auf einem algorithmischen Weg vom Code hergeleitet (meistens, indem Anführungszeichen gesetzt wurden, manchmal aber noch auf eine leicht kompliziertere Weise).&lt;br /&gt;
Der Code benutzt die Daten, um den Code auszugeben (was einfach ist, da die Daten den Code darstellen); dann benutzt er die Daten, um die Daten auszugeben (was möglich ist, da die Daten in einer algorithmischen Transformation besorgt werden).&lt;br /&gt;
&lt;br /&gt;
Wie oben ausgeführt, ist dies in einigen Sprachen leichter und in anderen schwieriger umzusetzen, zum Beispiel je nachdem, ob Funktionen &amp;#039;&amp;#039;[[First-Class-Funktion|first class citizens]]&amp;#039;&amp;#039; der Sprache sind oder nicht.&lt;br /&gt;
&lt;br /&gt;
Im strengen Sinn sollten Quines vom Zeichensatz unabhängig sein, und der Quellcode sollte einschließlich aller Zeilenwechsel exakt wieder ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|- class=&amp;quot;hintergrundfarbe5&amp;quot;&lt;br /&gt;
! Sprache !! class=&amp;quot;unsortable&amp;quot;|Beispiel !! class=&amp;quot;unsortable&amp;quot;|Hinweise&lt;br /&gt;
|-&lt;br /&gt;
| [[Lisp]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
((lambda (x)&lt;br /&gt;
  (list x (list (quote quote) x)))&lt;br /&gt;
 (quote&lt;br /&gt;
    (lambda (x)&lt;br /&gt;
      (list x (list (quote quote) x)))))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||Benötigt als einziges Beispiel keinen Datentyp &amp;quot;String&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[Go (Programmiersprache)|Go]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;go&amp;quot;&amp;gt;&lt;br /&gt;
package main&lt;br /&gt;
import &amp;quot;fmt&amp;quot;&lt;br /&gt;
func main() {&lt;br /&gt;
	fmt.Printf(&amp;quot;%s%c%s%c\n&amp;quot;, s, 0x60, s, 0x60)&lt;br /&gt;
}&lt;br /&gt;
var s = `&lt;br /&gt;
package main&lt;br /&gt;
import &amp;quot;fmt&amp;quot;&lt;br /&gt;
func main {&lt;br /&gt;
	fmt.Printf(&amp;quot;%s%c%s%c\n&amp;quot;, s, 0x60, s, 0x60)&lt;br /&gt;
}&lt;br /&gt;
var s = `&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||Nutzt die ASCII-Kodierung des Akzents Grave&lt;br /&gt;
|-&lt;br /&gt;
| [[C (Programmiersprache)|C]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
char*f=&amp;quot;#include &amp;lt;stdio.h&amp;gt;%cchar*f=%c%s%c;int main() {printf(f,10,34,f,34,10);}%c&amp;quot;;int main() {printf(f,10,34,f,34,10);}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| Nutzt die ASCII-Kodierung des Anführungszeichens&lt;br /&gt;
|-&lt;br /&gt;
| [[Lua]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
a=&amp;quot;a=%q print(a:format(a))&amp;quot; print(a:format(a))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| Vom Zeichensatz unabhängig&lt;br /&gt;
|-&lt;br /&gt;
| [[Python (Programmiersprache)|Python 2]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a=&amp;quot;a=%c%s%c;print a%%(34,a,34)&amp;quot;;print a%(34,a,34)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| Nutzt die ASCII-Kodierung des Anführungszeichens&lt;br /&gt;
|-&lt;br /&gt;
| [[Python (Programmiersprache)|Python 3]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
a=&amp;quot;a=%c%s%c;print(a%%(34,a,34))&amp;quot;;print(a%(34,a,34))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| Nutzt die ASCII-Kodierung des Anführungszeichens&lt;br /&gt;
|-&lt;br /&gt;
| [[Perl (Programmiersprache)|Perl]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
$a=&amp;#039;$a=%c%s%c;printf($a,39,$a,39,10);%c&amp;#039;;printf($a,39,$a,39,10);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| Nutzt die ASCII-Kodierung des Hochkommas&lt;br /&gt;
|-&lt;br /&gt;
| Perl ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
$r=&amp;#039;\&amp;#039;; $_=$r; s/([\\\&amp;#039;\\\\])/\\\\$1/g; print \&amp;#039;$r=\\\&amp;#039;\&amp;#039;.$_.$r;&lt;br /&gt;
&amp;#039;; $_=$r; s/([\&amp;#039;\\])/\\$1/g; print &amp;#039;$r=\&amp;#039;&amp;#039;.$_.$r;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| Vom Zeichensatz unabhängig&lt;br /&gt;
|-&lt;br /&gt;
|Perl6&lt;br /&gt;
|&amp;lt;syntaxhighlight lang=&amp;quot;perl6&amp;quot;&amp;gt;&lt;br /&gt;
my $t=&amp;quot;; say \&amp;quot;my \\\$t=\&amp;quot;,\$t.perl,\$t&amp;quot;; say &amp;quot;my \$t=&amp;quot;,$t.perl,$t&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Ruby (Programmiersprache)|Ruby]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
puts &amp;lt;&amp;lt;2*2,2&lt;br /&gt;
puts &amp;lt;&amp;lt;2*2,2&lt;br /&gt;
2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| Vom Zeichensatz unabhängig&lt;br /&gt;
|-&lt;br /&gt;
| Ruby ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
eval s=%q(puts&amp;quot;eval s=%q(#{s})&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| Vom Zeichensatz unabhängig&lt;br /&gt;
|-&lt;br /&gt;
| [[Rust_(Programmiersprache)|Rust]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rust&amp;quot;&amp;gt;&lt;br /&gt;
fn main() {&lt;br /&gt;
    let x = &amp;quot;fn main() {\n    let x = &amp;quot;;&lt;br /&gt;
    let y = &amp;quot;print!(\&amp;quot;{}{:?};\n    let y = {:?};\n    {}\&amp;quot;, x, x, y, y)\n}\n&amp;quot;;&lt;br /&gt;
    print!(&amp;quot;{}{:?};&lt;br /&gt;
    let y = {:?};&lt;br /&gt;
    {}&amp;quot;, x, x, y, y)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| [[C-Sharp|C#]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
var f=&amp;quot;var f={1}{0}{1};Console.Write(f,f,(char)34);&amp;quot;;Console.Write(f,f,(char)34);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||Möglich ab C# 9 durch Top-Level-Statements&lt;br /&gt;
|-&lt;br /&gt;
| [[Java (Programmiersprache)|Java]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class Q{public static void main(String[]a){String f=&lt;br /&gt;
&amp;quot;class Q{public static void main(String[]a){String f=%c%s%1$c;System.out.printf(f,34,f);}}&amp;quot;;&lt;br /&gt;
System.out.printf(f,34,f);}}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||Nur eine Zeile&lt;br /&gt;
|-&lt;br /&gt;
| [[Kotlin (Programmiersprache)|Kotlin]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;kotlin&amp;quot;&amp;gt;&lt;br /&gt;
fun main(args: Array&amp;lt;String&amp;gt;){val f=&amp;quot;&amp;quot;&amp;quot;fun main(args: Array&amp;lt;String&amp;gt;){val f=&amp;quot;%s&amp;quot;%s&amp;quot;%s&amp;quot;;System.out.printf(f,&amp;#039;&amp;quot;&amp;#039;,f,&amp;#039;&amp;quot;&amp;#039;)}&amp;quot;&amp;quot;&amp;quot;;System.out.printf(f,&amp;#039;&amp;quot;&amp;#039;,f,&amp;#039;&amp;quot;&amp;#039;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||Nur eine Zeile, vom Zeichensatz unabhängig&lt;br /&gt;
|-&lt;br /&gt;
| [[JavaScript]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
(x=&amp;gt;console.log(x+JSON.stringify(x)+&amp;#039;)&amp;#039;))(&amp;quot;(x=&amp;gt;console.log(x+JSON.stringify(x)+&amp;#039;)&amp;#039;))(&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| [[Sleep (Programmiersprache)|Sleep]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
[{$s = &amp;#039;;print(&amp;quot;[{\$s = &amp;quot;.chr(39).$s.chr(39).$s);}]&amp;#039;;print(&amp;quot;[{\$s = &amp;quot;.chr(39).$s.chr(39).$s);}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| [[PHP]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php printf($c = &amp;#039;&amp;lt;?php printf($c = %c%s%c, 39, $c, 39); ?&amp;gt;&amp;#039;, 39, $c, 39); ?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
|-&lt;br /&gt;
| [[Pascal (Programmiersprache)|Pascal]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
const a=&amp;#039;;begin write(^#^/^.^3^4^`^!^}#39,a,#39,a)end.&amp;#039;;begin write(^#^/^.^3^4^`^!^}#39,a,#39,a)end.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| Nutzt Escape-Sequenzen&lt;br /&gt;
|-&lt;br /&gt;
| [[Embarcadero Delphi|Delphi]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;delphi&amp;quot;&amp;gt;&lt;br /&gt;
program Quine;{$APPTYPE CONSOLE}var x:String=&lt;br /&gt;
&amp;#039;program Quine;{$APPTYPE CONSOLE}var x:String=;begin Insert(#39+x+#39,x,46);WriteLn(x);ReadLn;end.&amp;#039;;&lt;br /&gt;
begin Insert(#39+x+#39,x,46);WriteLn(x);ReadLn;end.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| Ohne Zeilenumbrüche (wäre sonst zu lang für diese Tabelle)&lt;br /&gt;
|-&lt;br /&gt;
| [[Commodore_Basic_V2|Commodore 64 Basic V2]] ||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;basic&amp;quot;&amp;gt;&lt;br /&gt;
1 a$=&amp;quot;5 q$=chr$(34):s$=chr$(36):g$=chr$(61):z$=chr$(157)&amp;quot;&lt;br /&gt;
2 b$=&amp;quot;6 printz$;1;chr$(65)s$g$q$a$q$:printz$;2;chr$(66)s$g$q$b$q$&amp;quot;&lt;br /&gt;
3 c$=&amp;quot;7 printz$;3;chr$(67)s$g$q$c$q$:printz$;4;chr$(68)s$g$q$d$q$&amp;quot;&lt;br /&gt;
4 d$=&amp;quot;8 printa$:printb$:printc$:printd$&amp;quot;&lt;br /&gt;
5 q$=chr$(34):s$=chr$(36):g$=chr$(61):z$=chr$(157)&lt;br /&gt;
6 printz$;1;chr$(65)s$g$q$a$q$:printz$;2;chr$(66)s$g$q$b$q$&lt;br /&gt;
7 printz$;3;chr$(67)s$g$q$c$q$:printz$;4;chr$(68)s$g$q$d$q$&lt;br /&gt;
8 printa$:printb$:printc$:printd$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| Nutzt die ASCII-Kodierung des Anführungszeichens und der Buchstaben der Variablennamen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Theoretischer Hintergrund ==&lt;br /&gt;
&lt;br /&gt;
Die Existenz von Quines wird theoretisch durch den [[Rekursionssatz]] (auch Fixpunktsatz von [[Kleene]] genannt) gesichert.&lt;br /&gt;
&lt;br /&gt;
Grob verläuft die Argumentation so:&lt;br /&gt;
&lt;br /&gt;
* Man kann auf die Eigenschaften von Programmiersprachen durch Ergebnisse der [[Berechenbarkeitstheorie]] schließen, welche sehr einfache Modelle von Programmen mathematisch exakt analysiert.&lt;br /&gt;
* Da man alle Programme (genauer: deren endliche Quelltexte) abzählen, also [[Bijektion|bijektiv]] auf die [[Natürliche Zahl|natürlichen Zahlen]] abbilden kann, reicht in dieser Modellwelt die Angabe einer natürlichen Zahl als Repräsentation eines Programms vollkommen aus. Diese Zahl leistet dasselbe wie der Quelltext, nämlich die Auswahl genau der Funktion, die der Semantik des Programms entspricht.&lt;br /&gt;
* Mit dem [[Fixpunktsatz von Kleene]] lässt sich zeigen, dass es ein Programm mit der Nummer &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; (mit &amp;lt;math&amp;gt;\forall x: \varphi_q(x) = q&amp;lt;/math&amp;gt;) gibt, dessen Ausgabe (für alle möglichen Eingaben &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;) wiederum die Zahl &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; ist. Somit ist dieses &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; aus dem obigen [[Hilfssatz|Lemma]] der Berechenbarkeitstheorie genau das Äquivalent eines Programms, welches seine eigene Repräsentation ausgibt&amp;amp;nbsp;– eines Quines.&lt;br /&gt;
&lt;br /&gt;
Die Aussagen aus der Berechenbarkeitstheorie für berechenbare Funktionen lassen sich leicht auf [[Turingmaschine]]n und damit letztlich auf beliebige [[Turing-Vollständigkeit|Turing-vollständige]] Sprachen verallgemeinern.&lt;br /&gt;
&lt;br /&gt;
Quines sind daher nicht nur zufällig das Ergebnis findiger Programmierer, die eine Programmiersprache austricksen, es handelt sich vielmehr um eine fundamentale Eigenschaft Turing-vollständiger Programmiersprachen, dass für sie Quines existieren.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[HQ9+]] ([[Esoterische Programmiersprache]]): Gibt mittels des [[HQ9+#Befehlssatz|&amp;#039;&amp;#039;Q&amp;#039;&amp;#039;-Befehls]] den eigenen Quelltext aus.&lt;br /&gt;
* [[Reproduktion]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* S. Barry Cooper: &amp;#039;&amp;#039;Computability Theory.&amp;#039;&amp;#039; Chapman &amp;amp; Hall/CRC mathematics, Boca Raton FL u.&amp;amp;nbsp;a. 2004, ISBN 1-58488-237-9.&lt;br /&gt;
* [[Douglas R. Hofstadter]]: &amp;#039;&amp;#039;[[Gödel, Escher, Bach]]. Ein Endloses Geflochtenes Band.&amp;#039;&amp;#039; 16. Auflage. Klett-Cotta, Stuttgart 2001, ISBN 3-608-94338-2.&lt;br /&gt;
* [[Ken Thompson]]: &amp;#039;&amp;#039;[http://cm.bell-labs.com/who/ken/trust.html Reflections on Trusting Trust]&amp;#039;&amp;#039;. In: &amp;#039;&amp;#039;[[Communications of the ACM]].&amp;#039;&amp;#039; Vol. 27, No. 8, August 1984, S. 761–763.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.madore.org/~david/computers/quine.html Ausführliche Seite zu Quines] (englisch)&lt;br /&gt;
* [http://www.nyx.net/~gthompso/quine.htm Quines in vielen Sprachen] (englisch)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:Theoretische Informatik]]&lt;br /&gt;
[[Kategorie:Berechenbarkeitstheorie]]&lt;/div&gt;</summary>
		<author><name>~2026-15034-40</name></author>
	</entry>
</feed>