Pouvez un programme de sortie d'une copie de lui-même
Je pense que cela pourrait être une question classique mais je ne suis pas au courant de la réponse. Pouvez un programme de sortie d'une copie de lui-même, et, dans l'affirmative, est-il un programme court qui fait cela?
Je n'accepte pas le "programme vide" comme une réponse, et je n'accepte pas les programmes qui ont accès à leur propre code source. Plutôt, je pense à quelque chose comme ceci:
int main(int argc, char** argv){ printf("int main(argc, char** argv){ printf...
mais je ne sais pas comment continuer...
- Ragnarius - Vous voudrez peut-être lire "Gödel, Escher et Bach" Par Douglas Hoffstader. Son livre décrit d'autres formes d'algorithmes et de la nature des algorithmes, ce qui est similaire à votre intérêt dans les quines. Je considère ceci comme un "Classique" de l'informatique texte qui a une énorme rapport à votre question.
- Essayez cette recherche: stackoverflow.com/search?q=quine
Vous devez vous connecter pour publier un commentaire.
Oui. Un programme qui peut faire une copie de lui-même est appelé un "quine".
L'idée de base de la plupart des quines est:
Vous écrivez du code qui prend une chaîne de caractères littérale
s
et l'imprime, tout en remplaçant les événements (ou la occurrence) d'un groupe spécial de sous-chaîne foo danss
par la valeur des
lui-même.Vous prenez le code source complet du programme, la mesure et l'utiliser comme la définition de
s
. mais vous exclure de la définition des
de la chaîne, au lieu de le remplacer par foo.C'est l'idée générale. Le reste est mise en forme de chaîne de détails, vraiment.
Il a appelé à une quine, et il y a un site qui les recueille.
test
Ce qui est appelé un Quine:
Source: Wikipedia
C'est en effet une question classique!
Au-delà de l'existence de quines, un résultat important dans la compilation de la théorie est que, pour tout fonction vous pourriez voulez calculer, il existe un programme qui "connaît son propre programme de texte", c'est à dire qui peut imprimer lui-même, si désiré. Ce théorème est appelé Kleene du deuxième théorème de récursion.
Oui. Voici un programme en C qui fait que je l'ai écrit il y a 20 ans.
http://womencht.reocities.com/Athens/8994/repeat.html
Si vous écrivez un quine, être attentif à ce que les copies ne soient pas écrire des copies d'eux-mêmes à l'infini et à la fin de la conquête du monde.
Dans le langage inventé par Jon Skeet suivantes opérateur affiche "Hello, world!\n".
Je peux faire une modification de cette langue, de sorte que le programme suivant affiche "Hello, world!\n":
Donc, c'est le programme qui imprime lui-même.
Oh, vous vous sentez quelque chose d'étrange à ce sujet, alors qu'il a une précise et correcte définition mathématique? C'est votre problème. "Je ne vais pas l'accepter..." ha! Les mathématiques ne l'accepter, et c'est elle la maîtresse-je servir, donc je poste cette réponse.
H
pour le Salut du Monde a déjà été documentés dans HQ9+, dans lequelQ
est une commande qui affiche le code source du programme. Aussi9
imprime les paroles de '99 bouteilles de bière sur un mur" et+
incréments de l'accumulateur. Par coïncidence, j'ai utilisé une application totalement fonctionnelle HQ9+ interprète sur ma calculatrice graphique. 🙂Je suppose que vous permettre de langages interprétés. (À un certain niveau, toutes les langues sont interprétées.) Quelqu'un écrit à l'interprète, et si vous le faites, vous pouvez y ajouter toutes les fonctions intégrées que vous aimez, comme un (lispy) fonction
(foo)
qui ne fait rien à l'exception d'impression "(foo)
".Ou vous pouvez ajouter de plus en plus complexe de la macro-fonction du type de
(printMeAndMyArgs ...)
.Donc, l'astuce est dans la façon de définir le problème.
Michael Sipser “Introduction à la Théorie de Calcul”, explique dans l'un des chapitres comment construire un quine. J'ai récemment écrit un programme Java basé sur cette idée et l'a posté dans : http://bornagainprogrammer.net/2009/11/07/hello-world-from-the-tm-self/
Je vous suggère de vous procurer ce livre et essayer de mettre en œuvre le programme vous-même dans votre langue préférée. Il y a beaucoup de plaisir les autres théorèmes dans ce livre.
-kiran
Il est possible en Java, mais avec certaines contraintes.
J'ai écrit un code simple en java, ce qui imprime lui-même.
Vous pouvez utiliser les littéraux de C/C++ pour utiliser le même programme. Vous pouvez ajouter tout ce que vous voulez à l'intérieur de ce programme, il imprime lui-même complètement.
Conditions
Java fichier ne doit pas être à l'intérieur d'un paquet
Structure de dossier ne doit pas contenir de dossiers avec des espaces dans son nom
Compilation cible doit être par défaut ou même dossier où le fichier java réside