Exemple 1. Combien de pages de mon rapport?
Quand j'étais apprentissage de la programmation, j'ai joué avec un outil pour imprimer assez de rapports à partir de données. Évidemment, je voulais que ce soit vraiment puissant et flexible de sorte qu'il serait le générateur de rapports pour mettre fin à tous les générateurs de rapports.
La définition de rapport a fini par être tellement souple qu'elle était Turing. Il pourrait ressembler à des variables, à choisir entre deux options, utiliser les boucles pour répéter les choses.
J'ai défini une variable intégrée N, le nombre de pages du rapport de l'instance, de sorte que vous pourriez mettre une chaîne de caractères qui dit "page n N" sur chaque page. J'ai fait deux passes, la première à compter les pages (au cours de laquelle N a été fixée à zéro), et le deuxième réellement générer, à l'aide de la N de la première passe.
Parfois, la première étape serait de calculer N, puis la seconde étape serait de générer un nombre différent de pages (parce que maintenant la non nul N allait changer à ce que le rapport ne). J'ai essayé de faire des passes de manière itérative jusqu'à la N s'installe. Puis j'ai réalisé que c'était sans espoir parce que si il n'a pas s'installer?
Cela conduit ensuite à la question "puis-je au moins de détecter et de prévenir l'utilisateur si l'itération ne va jamais à régler sur une valeur stable pour le nombre de pages de leur rapport produit?" Heureusement, à cette époque, j'étais devenu intéressé à la lecture de Turing, Godel, compilation, etc. et fait le lien.
Des années plus tard, j'ai remarqué que MS Access parfois des tirages "à la Page 6 de 5", qui est vraiment une chose merveilleuse.
Exemple 2: compilateurs C++
Le processus de compilation s'agit d'une expansion de modèles. Modèle de définitions peuvent être sélectionnées à partir de plusieurs spécialisations (assez bonne pour servir de "cond") et ils peuvent également être récursive. C'est donc une Turing (fonctionnels purs) méta-système, dans lequel le modèle de définitions de la langue, les types sont les valeurs, et le compilateur est vraiment un interprète. C'était un accident.
Par conséquent, il n'est pas possible d'examiner tout programme C++ et dire si le compilateur pourrait en principe se terminer par un succès de la compilation du programme.
Compilateur vendeurs de contourner ce problème en limitant la pile de la profondeur de modèle récursif. Vous pouvez ajuster la profondeur de g++.