[QUOTE=gerryino;20399060]Premesso che non sono un dev, ma un descrizione breve di cosa è la programmazione funzionale?
Giusto per restare informato…[/QUOTE]
A me spiegarono il concetto così e di lì in avanti ho sempre scritto codice a questa maniera, si parla di 12-10 anni fa.
Comunque, nemmeno io sono un dev: magari stimolo una risposta più corretta della mia 
Contesto, Python (puoi testare sta roba su, boh, https://extendsclass.com/python.html):
[code]
global_list =
def append_to_list(x):
global_list.append(x)
append_to_list(1)
append_to_list(2)
print(global_list) [/code]Questa funzione non è scritta secondo il rigore della programmazione funzionale: vuole global_list definita, e, peggio ancora, ci scrive sopra senza che sia parte dei dati passati alla funzione.
Più idoneo sarebbe:
[code]
def append_to_list(x, list):
list.append(x)
newlist =
append_to_list(1,newlist)
append_to_list(2,newlist)
print(newlist)[/code]che opera come opererebbe una funzione matematica, in quanto prende elementi da un dominio (numero, lista) ed associa loro un codominio (lista contenente numero).
In python ci sono poi le funzioni lambda che sono un po’ l’essenza della cosa: sono funzioni senza definizione che possono avere solo un’espressione. Tipo:
x = lambda a : a + 10
print(x(5))
Che permette di fare cose tipo:
def myfunc(n):
return lambda a : a * n
Ok, non ho fatto niente di speciale, ho definito una funzione con una lambda dentro? A che pro?
Ma sta a vedere…
def myfunc(n):
return lambda a : a * n
raddoppia = myfunc(2)
print(raddoppia(11))
triplica = myfunc(3)
print(triplica(11))
centuplica = myfunc(100)
print(centuplica(11))
calcolo_iva = myfunc(0.21)
print(calcolo_iva(11))
Meglio ancora con filter, map e reduce:
[code]
from functools import reduce
interi = [1,2,3,4,5,6]
dispari = filter(lambda n: n % 2 == 1, interi)
dispari_quadrati = map(lambda n: n * n, dispari)
totale = reduce(lambda acc, n: acc + n, dispari_quadrati)
print(total)
[/code]che è sta roba? Beh è l’equivalente di
interi = [1,2,3,4,5,6]
dispari = []
dispari_quadrati = []
total = 0
for i in interi:
if i%2 ==1:
dispari.append(i)
for i in dispari:
dispari_quadrati.append(i*i)
for i in dispari_quadrati:
totale += i
print(totale)