come i commenti alla tua domanda suggeriscono, si deve camminare attraverso il codice in un debugger per ottenere una buona comprensione di ciò che sta succedendo, se potete segui la spiegazione nel libro. Ma ti darò una breve panoramica di quello che sta succedendo:
Ciò che viene dimostrato è la "memoria", una tecnica di ottimizzazione comune utilizzata nella programmazione funzionale. Si dice che una funzione sia pura se il risultato dipende solo dagli argomenti passati in esso. Quindi, se una funzione è pura, puoi mettere in cache il risultato basato sugli argomenti - questa tecnica è chiamata memoisation. Lo farebbe se una funzione è costosa da calcolare e viene chiamata più volte.
L'esempio classico utilizzato per dimostrare questo (come qui) sta generando Fibonacci numbers. Non ho intenzione di passare attraverso come quelli sono risolti, ma in fondo, come si va a numeri sempre più elevati si ripeterti sempre di più come ogni numero viene calcolato dalla precedono due numeri. Con memoising ogni risultato intermedio è sufficiente calcolare una volta rendendo quindi l'algoritmo molto più veloce (molto, molto più veloce, come si va più in alto la sequenza).
Per quanto riguarda questo codice, il memoizer utilizza due parametri: "memo" che è la cache. In questo caso sta entrando con i primi due valori già compilati in '[0,1]' - questi sono i primi due numeri di Fibonacci.
Il secondo parametro è la funzione a cui verrà applicato il memoizzazione. In questo caso una funzione ricorsiva di Fibonacci:
function (shell, n) { shell di ritorno (n - 1) + shell (n - 2); }
ovvero il risultato è la somma dei due numeri precedenti nella sequenza.
Il memoizzatore prima controlla se ha già un risultato memorizzato nella cache. Se lo fa, lo restituisce immediatamente. In caso contrario, calcola il risultato e lo memorizza nella cache. Senza farlo ripetersi ripetutamente e rapidamente diventa incredibilmente lento una volta per arrivare ai numeri più alti nella sequenza.
fibonacci (15)? – spender
Mi aspetto che il libro entri nei dettagli su come funziona la funzione - c'è qualcosa in particolare che non capisci? – Douglas
Ehi, di recente ho fatto un video breve Memoizzazione di base utilizzando JavaScript - forse aiuta a capire memoizer: https://www.youtube.com/watch?v=lsp82x0XdsY –