2010-05-17 2 views
9

Ist es möglich, ein Programm zu schreiben, das seinen eigenen Quellcode mit Hilfe einer "sequenzerzeugenden Funktion" ausgibt?ist es möglich, ein Programm zu schreiben, das seinen eigenen Quellcode mit Hilfe einer "sequenzerzeugenden Funktion" ausgibt?

was ich eine sequenzgenerierende Funktion nenne, ist einfach eine Funktion, die einen Wert aus einem bestimmten Intervall (d. H. Druckbare ASCII-Zeichen (32-126)) zurückgibt. Der Punkt ist nun, dass diese erzeugte Sequenz der programmeigene Quellcode sein sollte. Wie Sie sehen, ist das Implementieren einer Funktion, die eine beliebige Sequenz zurückgibt, wirklich trivial, aber da die zurückgegebene Sequenz die Implementierung der Funktion selbst enthalten muss, ist es eine höchst nicht triviale Aufgabe.

dies ist, wie ein solches Programm (und seinen entsprechenden Ausgang) wie

#include <stdio.h> 

int fun(int x) { 
    ins1; 
    ins2; 
    ins3; 
    . 
    . 
    . 
    return y; 
} 

int main(void) { 
    int i; 
    for (i=0; i<size of the program; i++) { 
     printf("%c", fun(i)); 
    } 
    return 0; 
} 

ich denke aussehen könnte persönlich es nicht möglich ist, aber da ich über die zugrunde liegende Materie sehr viel wissen nicht, i postete meine Gedanken hier. ich freue mich schon auf ein paar Meinungen!

+0

Überprüfen Sie den Code, den ich unten veröffentlicht habe. Ist es das, was du willst? Ich bin nicht 100% sicher, was deine Regeln sind. – sigfpe

Antwort

1

Was Sie meinen, ist ein QUINE. Der Artikel von Wiki ist ziemlich gut, mit einigen nützlichen Links. http://en.wikipedia.org/wiki/Quine_%28computing%29

+0

Ich habe meine Frage bereits mit 'quine' markiert, Sie sehen: P. Ich denke, eine "gemeinsame" Quine funktioniert total anders. Wenn ich falsch liege, dann zeige mir bitte einen, der genau so funktioniert, wie ich es beschrieben habe. ich für mich selbst, war nicht glücklich, einen zu finden .. – guest

+0

Ich sehe nicht, warum nicht konnte. Wenn Ihre Funktion ein Zeichen-Array mit der Quelle des Programms darin gespeichert hat, würde es gut funktionieren. Es wäre dem ersten C-Beispiel in der Wiki-Seite sehr ähnlich. – corsiKa

+0

Der Punkt ist, dass die Funktion die Ausgabe "mathematisch" erzeugt, ohne etwas zu speichern! Wenn ich also die Funktion mit aufsteigenden Werten aufruft: fun (0) = 35 = '#', fun (1) = 105 = 'i', fun (2) = 110 = 'n' usw. – guest

2

Wenn Sie wissen, wie man ein Array als Funktion codiert (Sie scheinen zu sagen, dass Sie bereits wissen, wie man das macht), dann garantiert das Kleene Recursion theorem, dass es gemacht werden kann.

Aber für Zweifel an Thomases, here ist ein C-Beispiel. Es hat eine Programmgenerierungsfunktion, die nur +, -, *,/oder andere Funktionen verwendet, die sie verwenden.

Quitten sind immer möglich, wenn Sie Turing Vollständigkeit und Freiheit haben, zu drucken, was Sie mögen.

Verwandte Themen