Programmazione funzionale: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 9:
Questo tipo di funzioni hanno zero o più [[w:Parametro (programmazione)|parametri]] e un singolo valore di ritorno. I parametri sono gli input della funzione ed il valore di ritorno è il suo output. La definizione di una funzione descrive come questa deve essere valutata (computata) in termini di altre funzioni. Per esempio, la funzione ''f(x) = x<sup>2</sup> + 2'' è definita in termini delle funzioni di potenza e addizione. Ad un certo punto della serie di chiamate a funzioni, il linguaggio metterà a disposizioni funzioni atomiche, cioè funzioni che non richiamano nessun'altra funzione.
 
In un linguaggio di programmazione funzionale, le funzioni possono essere manipolate in diversi modi. Solitamente, in questi linguaggi, le funzioni sono entità di ''prima classe'', cioè possono essere passate come parametri ad altre funzioni e possono essere restituite come valori di ritorno da altre funzioni. Ciò permette a funzioni come <ttcode>mapcar</ttcode> in [[w:Lisp|Lisp]] e <ttcode>map</ttcode> in [[w:Haskell|Haskell]], che prendono una funzione e una lista come input ed applicano la funzione in input ad ogni elemento della lista, di restituire una lista dei risultati. Le funzioni possono avere dei nomi, come in ogni altro linguaggio, o essere definite anonimamente (a volte anche a ''[[w:run-time|run-time]]'') usando l'[[w:Lambda calcolo|astrazione lambda]], e essere usate come valori in altre funzioni.
 
I linguaggi funzionali permettono inoltre una tecnica chiamata ''currying'', che permette di trasformare una funzione con parametri multipli in una funzione con un solo parametro che mappa ad un'altra funzione con un solo parametro e così via, fino all'esaurimento dei parametri. La funzione trasformata può essere applicata ad un sottoinsieme dei suoi parametri iniziali e dare come risultato una nuova funzione dove i parametri di quel sottoinsieme sono costanti e il resto dei parametri hanno valori non ancora specificati. Infine questa nuova funzione può essere applicata ai parametri rimanenti per ottenere il risultato finale. Per esempio, una funzione <ttcode>somma(x,y) = x + y</ttcode> può essere trasformata in modo tale che il valore di ritorno di <ttcode>somma(2)</ttcode> (nota che non c'è il parametro y) sia una funzione anonima equivalente alla funzione <ttcode>somma2(y) = 2 + y</ttcode>. Questa nuova funzione ha un solo parametro a cui somma 2. Questa tecnica non sarebbe possibile se le funzioni non fossero entità ''di prima classe''.
 
==Storia==