Estoy jugando con la comprensión de cómo funciona el combinador Y en la programación funcional. Tengo una función factorial básica que he traducido a:
console.log((f => n => (n===0) ? 1 : n*f(f)(n-1))(f => n => (n===0) ? 1 : n*f(f)(n-1))(5)); // 120Pero, ¿cómo se simplifica esto exactamente (a sí mismo) después de llamarse a sí mismo repetidamente? Por ejemplo, después de dos veces se ve así:
const fact0 = (f => n => (n===0) ? 1 : n*f(f)(n-1))(f => n => (n===0) ? 1 : n*f(f)(n-1)); // 1. substitute "f => n => (n===0) ? 1 : n*f(f)(n-1)" for function call of f const fact1 = (n => (n===0) ? 1 : n*(f => n => (n===0) ? 1 : n*f(f)(n-1))(f => n => (n===0) ? 1 : n*f(f)(n-1))(n-1)); // 2. ... ? // 3. ... ? // Test to make sure results are ok console.log(fact0(5) === fact1(5))