Certains langages de programmation utilisent-ils des fonctions récursives générales comme base?

23

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é"?

Xophmeister
la source
1
Je dirais que les machines de Turing ou les machines à registres universels sont à la base des processeurs PL (PL d'assemblage). Ils n'ont pas de fonctions. Les fonctions -récursives sont à la base des PL impératifs. Ils n'ont pas de fonctions d'ordre supérieur. μ
Beroal
1
Je recommanderais également d'examiner la logique du premier ordre et Prolog.
Beroal
1
Avant C ++ 11, constexprvous 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-complete
JimmyB

Réponses:

45

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ωfixλλ-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.

μμμN

λλμλλ

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.

λ-calcul.

xuq01
la source
7
"personne ne programme avec Conway" ... certains le font Construire un jeu de travail de Tetris dans le jeu de la vie de Conway ... aussi en effet c'est aussi pratique que les espaces :) :)
Alexei Levenkov
λλ
@AlexeiLevenkov C'est tout à fait faux. L'espace est essentiellement un langage impératif (simple), mais avec une étrange syntaxe. Il dispose d' installations pour l' arithmétique, les flux de contrôle de base, pile et manipulation tas, et E / S . Le projet QFT, d'autre part, nécessitait la conception d'un compilateur à partir d'un langage très simple jusqu'à un assemblage RISC créé pour un processeur construit dans un automate cellulaire de type Wireworld émulé à l'aide de métapixels OTCA .
Orthographe non contextuelle
@AlexeiLevenkov Le compilateur Cogol → CGoL ultime a nécessité le travail de nombreuses personnes sur quatre ans, alors qu'il existe un projet appelé HaPyLi , compilant un langage beaucoup plus complexe pour Whitespace, qui a été écrit par une personne pendant son temps libre.
Orthographe non contextuelle du
4

Taper µ-recursive function programming languagedans 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.

Kapol
la source
μ
2
Bien sûr. Je viens de supposer qu'OP veut trouver un tel langage pour étudier la théorie ou quelque chose, pas pour conquérir le monde avec ;-)
Kapol