Motivación: Me gustaría poder utilizar la programación funcional de juguetes en idiomas sin funciones de primer orden, mediante el uso de números naturales en lugar de funciones.¿Cómo escribir una enumeración de todas las funciones computables?
Una función universal es una función f: N -> (N -> N), equivalentemente f: N * N -> N que enumera todas las posibles funciones computables. En otras palabras, hay un número k tal que f (k) es la función de cuadratura, hay un número j tal que f (j) es la función primo n-ésima, etc.
Para escribir tal función, se puede tome cualquier lenguaje completo de Turing (compilador de lenguaje de programación, cálculo lambda, máquinas de Turing ...) y enumere todos los programas. Me gustaría permitir no solo la evaluación, sino también las operaciones en funciones como la adición, la composición y el currying. Por ejemplo, dados los índices de dos funciones f, g Me gustaría saber cuál es el índice de la función f + g, o f compuesto con g. Esto permitiría la "programación funcional de juguetes".
¿Cuál es una buena manera de escribir dicha biblioteca de códigos? No estoy buscando un tarpit minimalista de Turing que tenga dificultades para calcular el factorial de 10, ni tampoco quiero escribir un compilador avanzado. Debe tener algunas funciones básicas como la adición y la posibilidad de escribir bucle, pero no mucho más.
Se aceptan soluciones en todos los idiomas de alto nivel. El seudocódigo, Haskell y Python son preferidos. Puede asumir una aritmética de precisión arbitraria. No se permite el uso de eval
o similar.
Aclaración: Las funciones enumeradas consistirán en todas las partial recursive (computable), esto incluye funciones que no se detienen en algunas entradas. La función universal se colgará en esos casos; por supuesto esto es inevitable. Ver también: funciones recursivas m - http://en.wikipedia.org/wiki/Μ-recursive_function.
Ya que parece necesitar algo de ayuda y empujando a aceptar una respuesta. Lo mejor es http://stackoverflow.com/questions/1797457/how-to-write-an-enumeration-of-all-computable-functions/1797575#1797575 de Pascal Cuoq. El último de hirschhornsalz tampoco está mal. Puedo entender que es difícil para ti aceptarlo. – babou