Существует ли короткая явная конструкция универсальной рекурсивной функции ? Все определения, которые я видел, каким-то образом связаны с нумерацией машин Тьюринга, что возможно, но кажется трудным и неуправляемым для написания на языке программирования более высокого уровня (например, Python, Haskell и т. Д.).
9
Ответы:
Как насчет оригинального интерпретатора Lisp Маккарти (изначально здесь )? Он универсален, работает с естественным кодированием (Lisp AST), не зависит от внешнего интерпретатора и составляет около 20 строк.
источник
Конечно. Напишите подпрограммы, которые вычисляют каждую из примитивных рекурсивных функций Годеля , и напишите подпрограмму для неограниченного оператора поиска. Набор функций, которые вы можете вычислить таким образом, эквивалентен набору функций, которые могут вычислять машины Тьюринга. Больше информации здесь .
Недостатком является то, что любой вход в вашу универсальную программу должен быть оформлен в терминах этих простых операций. Конечно, это то, для чего нужны компиляторы.
источник
Любой интерпретатор для любого языка, который является полным по Тьюрингу, является универсальной рекурсивной функцией. Существуют интерпретаторы для языков высокого уровня, таких как C ++ или Python.
Нумерация Годеля существует, но неявно. Например, код C ++, вычисляющий рекурсивную функциюг это индекс для г ,
источник
Универсальная функция
u
может быть написана довольно легко на языке, похожем на Haskell (без побочных эффектов, функций высшего порядка), а именно:Эта функция
u
универсальна, потому что она принимает (описание) программуf
и ленту вводаx
и сообщает вам результат запускаf
наx
.Хотя этот ответ не является полностью серьезным, он показывает, что компилятор или интерпретатор для языка, похожего на Haskell, уже содержит все компоненты сборки, необходимые для универсальной функции. Мораль этой истории в том, что лучше потратить время на изучение работы компиляторов и интерпретаторов, чем беспокоиться о реализации универсальной функции в терминах машин Тьюринга.
источник
u
берет функцию - я бы назвал ее функцией более высокого порядка. Я хотел быu
взять целое число или обычный алгебраический тип данных. Я не навязываю какую-либо конкретную модель вычислений, пока аргумент tou
является осязаемым - например, он может быть сериализован из / в строку.u
происходит замыкание, представляющее собой конечную последовательность байтов. Даже в обычной теореме utm целое число, котороеu
принимает, представляет функцию.Проверьте также эту статью Джона Тромпа, используя комбинаторную логику. Более ранняя рецензия, по-видимому, более недоступна, была даже аккуратнее.
источник