질문에 대한 직접적인 대답 : 예, 재귀 함수 (공백 생각)를 기반으로하는 난해하고 비현실적인 PL이 있지만 유효한 이유로 인해 μ 재귀 함수를 기반으로 한 실용적인 프로그래밍 언어는 없습니다 .μμ
일반적인 재귀 (즉, 재귀) 함수는 람다 계산법 보다 표현력 이 현저히 떨어 집니다. 따라서 이들은 프로그래밍 언어의 기초가 열악합니다. 또한 TM이 명령형 PL의 기초라는 점은 정확하지 않습니다. 실제로 우수한 명령형 프로그래밍 언어는 Turing 머신에 비해 λ- 미적분에 훨씬 가깝습니다 .μλ
계산 성 측면에서 재귀 함수, 튜링 머신 및 형식화되지 않은 λ- 미적분은 모두 동일합니다. 그러나 유형화되지 않은 LC에는 다른 두 가지 특성이없는 우수한 특성이 있습니다. 매우 간단하고 (구문 형태 3 개와 계산 규칙 2 개), 구성이 매우 뛰어나며 프로그래밍 구문을 비교적 쉽게 표현할 수 있습니다. 또한, 단순한 타입 시스템을 장착 (예를 들어, 시스템 F는 Ω 으로 확장 f를 내가 X )은 λ -calculus 매우 올바르게와 구조적으로 용이 많은 복잡한 프로그래밍 구조를 발현 할 수 있다는 점에서 표현 될 수있다. λ를 확장 할 수도 있습니다μλ에프ω에프나는 xλλ람다가 아닌 구문을 쉽게 포함 할 수 있습니다. 위에서 언급 한 다른 계산 모델 중 어느 것도 당신에게 좋은 속성을 제공하지 않습니다.
튜링 기계는 구성 적이거나 보편적이지 않습니다 (각 문제에 대해 TM이 있어야 함). "함수", "변수"또는 "구성"의 개념은 없습니다. TM이 명령형 PL의 기본이라는 것은 사실도 아닙니다-FWIW, 명령형 PL은 튜링 머신보다 제어 연산자를 가진 람다 계산법에 훨씬 더 가깝습니다. 자세한 설명은 Peter J. Landin의 "ALGOL 60과 교회의 람다 표기법 간의 대응"을 참조하십시오 . Brainf ** k로 프로그래밍 한 경우 (실제로는 단순한 Turing 머신을 구현 함) Turing 머신이 프로그래밍에 적합하지 않다는 것을 알게됩니다.
재귀 함수는 이와 관련하여 TM과 유사합니다. 그것들은 구성 적이지만 LC만큼 구성 적이지는 않습니다. 또한 유용한 프로그래밍 구성을 μ 재귀 함수로인코딩 할 수는 없습니다. 또한 μ- 재귀 함수는 N 이상을 계산하고 다른 모든 것을 계산하려면 괴델 번호 매기기를 사용하여 데이터를 자연수로 인코딩해야합니다. 이는 고통 스럽습니다.μμμN
따라서 대부분의 프로그래밍 언어가 어떻게 든 미적분학을 기반으로한다는 것은 우연의 일치가 아닙니다 ! λ 표현, 구성 성 및 확장 성, 다른 시스템이 부족하다는 : -calculus 좋은 특성을 가지고있다. 그러나 튜링 머신은 계산 복잡성을 연구하는 데 유용하며 μ 재귀 함수는 계산의 논리적 개념을 연구하는 데 유용합니다. 그들은 둘 것을 뛰어난 특성을 가지고 λ -calculus이 부족하다,하지만 프로그래밍 분야에서 λ -calculus 명확하게 승리.λλμλλ
실제로, 더 많은 Turing complete 시스템이 존재하지만, 뛰어난 속성이 부족합니다. Conway의 삶의 게임, LaTeX 매크로 및 심지어 (일부 주장) DNA는 모두 Turing이 완료되었지만 Conway를 사용한 프로그램은 하나도 없으며 (예 : 심각한 프로그래밍) LaTeX 매크로를 사용하여 계산 복잡성을 연구합니다. 그들은 단순히 좋은 속성이 없습니다. 튜링 완료 자체 는 프로그래밍과 관련하여 거의 의미가 없습니다.
또한 많은 비 Turing 완전한 전산 시스템은 프로그래밍에있어 매우 유용합니다. 정규 표현식과 yacc는 Turing이 완전하지는 않지만 특정 클래스의 문제를 해결하는 데 매우 강력합니다. Coq는 Turing complete도 아니지만 믿을 수 없을 정도로 강력합니다 ( Turing Turing 완전 사촌 OCaml보다 훨씬 표현력 이 뛰어납니다). 많은 (가까운) 쓸모없는 시스템이 흥미롭지 않은 Turing 완성이므로 프로그래밍에 관해서는 Turing 완성도가 핵심이 아닙니다. Brainf ** k 또는 Whitespace가 Coq보다 강력한 프로그래밍 언어라고 주장하지 않습니까? 표현 재단은 강력한 프로그래밍 언어의 핵심이며, 현대적인 프로그래밍 언어는 거의 항상 기반으로하는 이유입니다 λ-계산법.