C'est une question naïve et, par conséquent, peut-être malformée, donc excuses à l'avance!
À mon avis, une machine de Turing peut être considérée comme la base de calcul des langages de programmation procéduraux / impératifs. De même, le lambda calcul est le fondement des langages de programmation fonctionnels.
J'ai récemment appris que la thèse de Church-Turing montre également une équivalence mutuelle avec un troisième modèle de calcul: les fonctions récursives générales . Y a-t-il des langages de programmation qui utilisent cela comme modèle de calcul? Sinon, y a-t-il une raison technique à cela; c'est-à-dire, outre "Personne n'a encore essayé"?
constexpr
vous pouviez (/ deviez) utiliser des «modèles» pour que les calculs soient effectués au moment de la compilation par le compilateur. Les restrictions sur les modèles n'autorisent pas les boucles, mais vous pouvez utiliser la récursivité pour émuler n'importe quelle boucle, de sorte que vous vous retrouvez avec une fonction Turing-complete (méta-programmation) dans le cadre du standard du langage C ++, voir par exemple stackoverflow.com/questions / 189172 / c-templates-turing-completeRéponses:
Réponse directe à la question: oui, il existe des PL ésotériques et très impraticables basés sur des fonctions récursives (pensez à l'espace blanc), mais aucun langage de programmation pratique n'est basé sur des fonctions μ- récursives pour des raisons valables.μ μ
Les fonctions récursives générales (c'est-à-dire récursives) sont beaucoup moins expressives que les calculs lambda. Ainsi, ils constituent une mauvaise base pour les langages de programmation. Vous n'avez pas non plus raison de dire que la MT est la base des PL impératifs: en réalité, les bons langages de programmation impératifs sont beaucoup plus proches du λ -calculus que des machines de Turing.μ λ
En termes de calculabilité, les fonctions récursives, la machine de Turing et le λ -calculus non typé sont tous équivalents. Cependant, la LC non typée a de bonnes propriétés qu'aucune des deux autres n'a. Il est très simple (seulement 3 formes syntaxiques et 2 règles de calcul), est très compositionnel et peut exprimer des constructions de programmation relativement facilement. De plus, équipé d'un système de type simple (par exemple, le système F ω étendu avec f i x ), le λ -calculus peut être extrêmement expressif en ce qu'il peut exprimer de nombreuses constructions de programmation complexes facilement, correctement et de manière compositionnelle. Vous pouvez également étendre le λμ λ Fω Fje x λ λ -calcul facilement pour inclure des constructions qui ne sont pas des lambdas. Aucun des autres modèles de calcul mentionnés ci-dessus ne vous donne ces belles propriétés.
La machine de Turing n'est ni compositionnelle ni universelle (vous devez avoir une MT pour chaque problème). Il n'y a pas de concepts de "fonctions", "variables" ou "composition". Il n'est pas non plus tout à fait vrai que les MT sont la base des PL impératifs - FWIW, les PL impératifs sont beaucoup, beaucoup plus proches des calculs lambda avec opérateurs de contrôle que des machines Turing. Voir "Une correspondance entre ALGOL 60 et la notation Lambda de Church" de Peter J. Landin pour une explication détaillée. Si vous avez programmé dans Brainf ** k (qui implémente en fait une machine de Turing assez simple), vous saurez que les machines de Turing ne sont pas une bonne idée pour la programmation.
En fait, il existe de nombreux systèmes Turing plus complets, mais ils n'ont absolument aucune propriété exceptionnelle. Le jeu de la vie de Conway, les macros LaTeX et même (certains prétendent) l'ADN sont tous Turing complets, mais personne ne programme (c.-à-d. Fait une programmation sérieuse) avec Conway ou étudie la complexité de calcul en utilisant les macros LaTeX. Ils manquent tout simplement de bonnes propriétés. Turing complet en soi n'a presque aucun sens en matière de programmation.
la source
Taper
µ-recursive function programming language
dans Google m'a conduit à ce dépôt GitHub , donc la réponse à votre question est:Oui, et ça s'appelle la myopie
Soit dit en passant, c'est écrit à Haskell.
la source