Это наивный и, следовательно, возможно, некорректный вопрос, поэтому заранее извиняюсь!
Я считаю, что машина Тьюринга может рассматриваться как вычислительная основа для процедурных / императивных языков программирования. Точно так же лямбда-исчисление является основой для функциональных языков программирования.
Недавно я узнал, что тезис Черча-Тьюринга также показывает взаимную эквивалентность с третьей моделью вычислений: общими рекурсивными функциями . Есть ли языки программирования, которые используют это в качестве модели вычислений? Если нет, то есть ли техническая причина; то есть кроме "Никто еще не пробовал"?
constexpr
вы могли (/ должны были) использовать «шаблоны», чтобы вычисления выполнялись компилятором во время компиляции. Ограничения на шаблоны не допускают циклы, но вы можете использовать рекурсию для эмуляции любого цикла, так что в итоге вы получите средство Turing-complete (мета-программирование) как часть стандарта языка C ++, см., Например, stackoverflow.com/questions / 189172 / c-templates-turing-completeОтветы:
Прямой ответ на вопрос: да, существуют эзотерические и крайне непрактичные PL, основанные на -рекурсивных функциях (представьте пробел), но практический язык программирования не основан на рекурсивных функциях по уважительным причинам.μ μ
Общие рекурсивные (т. Е. Mu -рекурсивные) функции значительно менее выразительны, чем лямбда-исчисления. Таким образом, они создают плохую основу для языков программирования. Вы также не правы в том, что ТМ является основой императивных PL: в действительности хорошие императивные языки программирования гораздо ближе к -calculus, чем к машинам Тьюринга.μ λ
С точки зрения вычислимости -рекурсивные функции, машина Тьюринга и нетипизированный -calculus все эквивалентны. Однако нетипизированный LC обладает хорошими свойствами, которых нет ни у одного из двух других. Он очень прост (всего 3 синтаксических формы и 2 вычислительных правила), очень сложен и может относительно легко выражать программные конструкции. Более того, оснащенный простой системой типов (например, System расширенной с помощью ), -calculus может быть чрезвычайно выразительным в том смысле, что он может выразить многие сложные программные конструкции легко, правильно и композиционно. Вы также можете расширитьμ λ Fω ея х λ λ -калькулум легко включать конструкции, которые не являются лямбдами. Ни одна из других вычислительных моделей, упомянутых выше, не обладает такими хорошими свойствами.
Машина Тьюринга не является ни композиционной, ни универсальной (вам нужно иметь ТМ для каждой задачи). Нет понятий «функции», «переменные» или «состав». Также не совсем верно, что ТМ являются основой императивных PL - FWIW, императивные PL намного, намного ближе к лямбда-исчислениям с управляющими операторами, чем к машинам Тьюринга. См. Подробное объяснение «Переписка между Алголом 60 и лямбда-нотацией» Питера Дж. Ландина . Если вы запрограммировали в Brainf ** k (который на самом деле реализует довольно простую машину Тьюринга), вы будете знать, что машины Тьюринга не являются хорошей идеей для программирования.
Таким образом, не случайно, что большинство языков программирования так или иначе основаны на -calculus! -исчисления обладает хорошими свойствами: выразительность, композиционность и расширяемость, что другие системы не хватает. Однако машины Тьюринга хороши для изучения вычислительной сложности, а -рекурсивные функции хороши для изучения логического понятия вычислимости. Они оба обладают выдающимися свойствами, которых нет у -calculus, но в области программирования -calculus явно выигрывает.λ λ μ λ λ
На самом деле существует множество систем Turing, но им не хватает каких-либо выдающихся свойств. Игра жизни Конвея, макросы LaTeX и даже (некоторые утверждают) ДНК полностью завершены по Тьюрингу, но никто не программирует (то есть занимается серьезным программированием) с Конвеем и не изучает вычислительную сложность с использованием макросов LaTeX. Им просто не хватает хороших свойств. Тьюринг сам по себе является почти бессмысленным , когда речь идет о программировании.
Кроме того, многие нетуринговы полные вычислительные системы очень полезны, когда дело доходит до программирования. Регулярные выражения и yacc не являются полными по Тьюрингу, но они чрезвычайно эффективны для решения определенного класса задач. Coq также не является полным по Тьюрингу, но невероятно мощным (на самом деле он считается гораздо более выразительным, чем его двоюродный брат по Тьюрингу, OCaml). Когда дело доходит до программирования, полнота по Тьюрингу не является ключевой, так как многие (близкие) бесполезные системы неинтересны по завершению по Тьюрингу. Вы не собираетесь утверждать, что Brainf ** k или Whitespace являются более мощными языками программирования, чем Coq, не так ли? Выразительная основой является ключом к мощным языкам программирования, и именно поэтому современные языки программирования почти всегда основаны наλ -исчисление.
источник
Печатание
µ-recursive function programming language
в Google привело меня к этому репозиторию GitHub , поэтому ответ на ваш вопрос:Да, и это называется близорукостью
Кстати, на Хаскеле написано.
источник