Risposta diretta alla domanda: sì, ci sono PL esoterici e altamente poco pratici basati su funzioni ricorsive (pensa a Whitespace), ma nessun linguaggio pratico di programmazione si basa su funzioni recursive a causa di validi motivi.μμμ
Le funzioni generali ricorsive (cioè, -recursive) sono significativamente meno espressive dei calcoli lambda. Pertanto, costituiscono una base insufficiente per i linguaggi di programmazione. Inoltre, non hai ragione nel ritenere che la TM sia la base dei PL imperativi: in realtà, i linguaggi di programmazione imperativi buoni sono molto più vicini a -calculus che a quelli di Turing.λμλ
In termini di calcolabilità, le funzioni ricorsive , la macchina di Turing e il non tipizzato -sono tutti equivalenti. Tuttavia, il LC non tipizzato ha buone proprietà che nessuno degli altri due ha. È molto semplice (solo 3 forme sintattiche e 2 regole computazionali), è altamente compositivo e può esprimere relativamente facilmente costrutti di programmazione. Inoltre, dotato di un sistema di tipo semplice (ad esempio, System esteso con ), il -calculus può essere estremamente espressivo in quanto può esprimere molti costrutti di programmazione complessi in modo facile, corretto e compositivo. Puoi anche estendereλ F ω f i x λ λμλFωfio xλλ-calcolo facilmente per includere costrutti che non sono lambda. Nessuno degli altri modelli computazionali menzionati sopra ti dà queste belle proprietà.
La macchina di Turing non è né compositiva né universale (è necessario disporre di una TM per ogni problema). Non ci sono concetti di "funzioni", "variabili" o "composizione". Inoltre, non è esattamente vero che le TM sono la base dei PL imperativi - FWIW, i PL imperativi sono molto, molto più vicini ai calcoli lambda con gli operatori di controllo che alle macchine di Turing. Vedi "Una corrispondenza tra ALGOL 60 e Lambda-Notation di Peter J. Landin " per una spiegazione dettagliata. Se hai programmato in Brainf ** k (che in realtà implementa una macchina Turing piuttosto semplice), saprai che le macchine Turing non sono una buona idea per la programmazione.
μ μ Nμ funzioni ricorsive sono simili alle TM in questo senso. Sono compositivi, ma non altrettanto compositivi come LC. Inoltre, non è possibile codificare utili costrutti di programmazione in funzioni -recursive. Inoltre, le funzioni ricorsive di calcolano solo su e per calcolare qualsiasi altra cosa dovresti codificare i tuoi dati in numeri naturali usando una sorta di numerazione di Gödel, il che è doloroso.μμN
Quindi, non è una coincidenza che la maggior parte dei linguaggi di programmazione siano in qualche modo basati sul -calculus! Il -calculus ha buone proprietà: espressività, composizionalità ed estensibilità, che mancano ad altri sistemi. Tuttavia, le macchine di Turing sono utili per lo studio della complessità computazionale e le funzioni ricorsive sono utili per lo studio della nozione logica di calcolabilità. Entrambi hanno proprietà eccezionali che mancano al -calculus, ma nel campo della programmazione -calculus vince chiaramente.λ μ λ λλλμλλ
In effetti, ci sono molti, molti più sistemi completi di Turing là fuori, ma mancano di qualsiasi proprietà eccezionale. Conway's Game of Life, macro LaTeX e persino (alcuni sostengono) il DNA sono tutti Turing completi, ma nessuno dei programmi (ovvero esegue una programmazione seria) con Conway o studia la complessità computazionale usando le macro LaTeX. Mancano semplicemente buone proprietà. Il turing completo di per sé è quasi insignificante quando si tratta di programmazione.
Inoltre, molti sistemi computazionali completi senza Turing sono molto utili quando si tratta di programmazione. Le espressioni regolari e lo yacc non sono completi di Turing, ma sono estremamente potenti nel risolvere una certa classe di problemi. Anche Coq non è completo di Turing, ma è incredibilmente potente (in realtà è considerato molto più espressivo del suo cugino completo di Turing, OCaml). Quando si tratta di programmazione, la completezza di Turing non è la chiave, poiché molti sistemi (quasi) inutili sono senza interesse Turing completi. Non affermerai che Brainf ** k o Whitespace sono linguaggi di programmazione più potenti di Coq, vero? Una base espressiva è la chiave per potenti linguaggi di programmazione, ed è per questo che i moderni linguaggi di programmazione sono quasi sempre basati su λ-calcolo.