Como los comentarios a su pregunta sugieren, debe caminar a través del código en un depurador para obtener una buena comprensión de lo que está pasando, si puede Sigue la explicación en el libro. Pero le daré una breve descripción de lo que está sucediendo:
Lo que se está demostrando es 'memorización', que es una técnica de optimización común utilizada en la programación funcional. Se dice que una función es pura si el resultado depende solo de los argumentos que se pasan a ella. Por lo tanto, si una función es pura, puede almacenar en caché el resultado en función de los argumentos; esta técnica se denomina memorización. Haría esto si una función es costosa de calcular y se llama varias veces.
El ejemplo clásico utilizado para demostrar esto (como aquí) es generar Fibonacci numbers. No voy a ver cómo se resuelven esos problemas, pero básicamente, a medida que avanzas en números cada vez más altos, te repites cada vez más a medida que se calcula cada número a partir de los dos números precedentes. Al recordar cada resultado intermedio, solo tiene que calcularlos una vez, lo que hace que el algoritmo sea mucho más rápido (mucho, mucho más rápido a medida que avanza en la secuencia).
En lo que respecta a este código, el memoial toma dos parámetros: 'memo' que es la caché. En este caso, entra con los dos primeros valores que ya se han llenado en '[0,1]': estos son los dos primeros números de Fibonacci.
El segundo parámetro es la función a la que se aplicará la memorización. En este caso, una función de Fibonacci recursiva:
función (shell, n) { shell de retorno (n - 1) + shell (n - 2); }
es decir, el resultado es la suma de los dos números anteriores de la secuencia.
El memoizer primero de los controles para ver si ya tiene un resultado en caché. Si lo hace, lo devuelve inmediatamente. Si no, calcula el resultado y lo almacena en el caché. Sin hacer esto, se repetiría una y otra vez y rápidamente se vuelve imposiblemente lento una vez para llegar a los números más altos en la secuencia.
fibonacci (15)? – spender
Espero que el libro entre en detalles sobre cómo funciona la función. ¿Hay algo en particular que no comprenda? – Douglas
Hola, recientemente realicé un breve video sobre la memorización básica mediante javascript. Quizás ayude a entender el memoizer: https://www.youtube.com/watch?v=lsp82x0XdsY –