variabili) Funzioni come dato (passabili come argomenti o generate da altre funzioni HOF) utilizzo di ricorsione, pattern matching e composizione di funzioni
a function containing free variables, the system must save copies of the bindings of those variables at the time the function was defined. Such a combination of a function and a set of variable bindings is called a closure. Closures turn out to be useful in a wide variety of applications. (Paul Graham, On Lisp, cap 2.6)
{ acc=acc+n; console.log(acc); return acc; } }; Definizione della closure Variabile locale visibile nello scopo delle funzioni figlie della HOF Funzione ritornata dalla HOF
trasformazione, un valore o oggetto iniziale e la lista), applica una riduzione della lista var lst=[1,2,3,4,5,6,7,8,9,10]; var ret=reduce(function(x,y) { return x+y; },0,lst); // -> 55
trasformazione, un valore o oggetto iniziale e la lista), applica una riduzione della lista var lst=[1,2,3,4,5,6,7,8,9,10]; var ret=reduce(function(x,y) { return x+y; },0,lst); // -> 55
una funzione più complessa. Questo composizione, permette di creare una funzione che è il risultato di una concatenazione di funzioni. Unica condizione è che queste funzioni accettino come parametro di input e di return un unico parametro.
1;}; var sum2 = function(x) { return x + 2;}; var sum3 = function(x) { return x + 3;}; var fnSum = sequence(sum1,sum2,sum3); fnSum(10); //-> 16 // equivale a sum3(sum2(sum1(10)))
function (x) { return x+ n }; } var sum1 = genSum(1); var sum2 = genSum(2); var sum3 = genSum(3); var fnSum = sequence(sum1,sum2,sum3); fnSum(10); //-> 16
funzione che accetta più parametri in una funzione che restituisce una catena di funzioni, fino all’esaurirsi della lista di parametri. Dopo di che viene eseguito il corpo vero è proprio della funzione.
è un parziale della funzione sum con i primi 2 parametri a,b già valorizzati con 1 e 2. //sum3 diventa una funzione che accetta 2 parametri c e d. sum3(3,4); -> ritorna 10 var sum6=sum3.curry(3); //sum6 è a sua volta una parzializzaione di sum3 che accetta un unico parametro d a cui viene aggiunto il valore 6. sum6(4); -> ritorna 10