¿Qué es una función de punto fijo y cuándo son útiles?

Los combinadores de punto fijo son útiles cuando intentamos introducir la recursividad en el cálculo lambda. Considere la definición de factorial (usaré la notación similar a Haskell):

fac n = si n == 1 entonces 1 más n * fac (n-1)

En el cálculo lambda no tenemos ‘argumentos’ o coincidencia de patrones, por lo que debemos escribirlo así:

fac = \ n -> si n == 1 entonces 1 más n * fac (n-1)

Es una definición casi correcta de factorial. Desafortunadamente, es recursivo y el cálculo lambda no tiene recursividad, ya que no tiene ‘funciones con nombre’ en absoluto. Hagamos un truco: extraeremos la definición de ‘fac’ a una función separada ‘g’, que tomará ‘fac’ como parámetro y no será recursiva:

fac n = g fac n
g fac = \ n -> si n == 1 entonces 1 más n * fac (n-1)
– o
fac = g fac
g = \ fac, n -> si n == 1 entonces 1 más n * fac (n-1)

Genial, ahora tenemos una definición no recursiva para ‘g’ y una ecuación simple para ‘fac’: debe ser un punto fijo de ‘g’. Como tenemos combinadores de punto fijo (p. Ej., Combinador Y), también podemos escribir ‘fac’ de forma no recursiva:

fac = Y g

More Interesting

¿Por qué la informática teórica es tan seca en los trabajos, a excepción de la academia? Aunque todas las empresas se enfrentan a desafíos, no hay una guerra muy reñida contra problemas difíciles, y las personas tienden a elegir la forma fácil de resolver cada problema.

¿Cuáles son los problemas en informática para los cuales se conoce con certeza la mejor complejidad computacional absoluta?

¿Todos los números reales tienen una expansión binaria?

¿Hay algún problema que requiera más tiempo exponencial de resolución (por ejemplo, doble exp.) Pero que pueda verificarse en tiempo polinómico determinista?

¿Cuáles son algunos métodos heurísticos en la factorización de números primos?

¿Cuáles son algunos procesos que realizamos con computadoras que no se encuentran bajo el formalismo de la máquina de Turing?

¿Es necesario aprender matemáticas discretas y sus aplicaciones para comenzar la programación en Python?

¿Qué son los combinadores de SKI?

¿Cuál es un ejemplo de un operador XOR que utiliza conceptos del mundo real?

¿Cuál es el significado del teorema de Rice en la teoría de la complejidad computacional?

¿Qué importancia tienen las matemáticas en la programación de computadoras?

¿Qué significa la informática teórica?

¿Cuál es la justificación rigurosa de la exactitud de la segunda formulación de la solución DP de corte de varillas en CLRS?

¿Cómo pruebo o refuto lo siguiente: f (n) = o (g (x)) implica f (n) = O (g (n))?

¿Son los algoritmos y las fórmulas dos cosas diferentes y mutuamente excluyentes? ¿Cuál es o no es la diferencia?