Ho letto articoli sulla programmazione funzionale ogni giorno e ho cercato di applicare alcune pratiche il più possibile. Ma non capisco cosa sia unico nel curry o in un'applicazione parziale.
Prendi questo codice Groovy come esempio:
def mul = { a, b -> a * b }
def tripler1 = mul.curry(3)
def tripler2 = { mul(3, it) }
Non capisco qual è la differenza tra tripler1
e tripler2
. Non sono entrambi uguali? Il "curry" è supportato in linguaggi funzionali puri o parziali come Groovy, Scala, Haskell ecc. Ma posso fare la stessa cosa (curry di sinistra, curry di destra, n-curry o applicazione parziale) semplicemente creando un altro nome o anonimo funzione o chiusura che inoltrerà i parametri alla funzione originale (come tripler2
) nella maggior parte delle lingue (anche C.)
Mi sto perdendo qualcosa qui? Ci sono posti in cui posso usare il curry e l'applicazione parziale nella mia applicazione Grails, ma esito a farlo perché mi chiedo "Com'è diverso?"
Per favore, illuminami.
EDIT: State dicendo che l'applicazione parziale / curry è semplicemente più efficiente della creazione / chiamata di un'altra funzione che inoltra i parametri predefiniti alla funzione originale?
f x y = x + y
significa che f
è una funzione che accetta un parametro int. Il risultato di f x
( f
applicato a x
) è una funzione che accetta un parametro int. Il risultato f x y
(o (f x) y
, cioè f x
applicato a y
) è un'espressione che non accetta parametri di input e viene valutata riducendo x + y
.