Ich habe jeden Tag Artikel über funktionale Programmierung gelesen und versucht, einige Praktiken so weit wie möglich anzuwenden. Aber ich verstehe nicht, was beim Curry oder bei der teilweisen Anwendung einzigartig ist.
Nehmen Sie diesen Groovy-Code als Beispiel:
def mul = { a, b -> a * b }
def tripler1 = mul.curry(3)
def tripler2 = { mul(3, it) }
Ich verstehe nicht, was der Unterschied zwischen tripler1
und ist tripler2
. Sind sie nicht beide gleich? Das 'Currying' wird in reinen oder teilweise funktionalen Sprachen wie Groovy, Scala, Haskell usw. unterstützt. Aber ich kann das Gleiche tun (Links-Curry, Rechts-Curry, N-Curry oder Teilanwendung), indem ich einfach eine andere benannte oder anonyme Sprache erstelle Funktion oder Schließung, die die Parameter in den tripler2
meisten Sprachen (sogar C) an die ursprüngliche Funktion (wie ) weiterleitet .)
Vermisse ich hier etwas? Es gibt Stellen, an denen ich Curry und Teilanwendung in meiner Grails-Anwendung verwenden kann, aber ich zögere, dies zu tun, weil ich mich frage: "Wie ist das anders?"
Bitte erleuchte mich.
EDIT: Wollen Sie damit sagen, dass eine teilweise Anwendung / Currying einfach effizienter ist als das Erstellen / Aufrufen einer anderen Funktion, die Standardparameter an die ursprüngliche Funktion weiterleitet?
f x y = x + y
bedeutet dies beispielsweise, dass f
eine Funktion einen int-Parameter akzeptiert. Das Ergebnis von f x
( f
angewendet auf x
) ist eine Funktion, die einen int-Parameter akzeptiert. Das Ergebnis f x y
(oder (f x) y
, dh f x
angewendet auf y
) ist ein Ausdruck, der keine Eingabeparameter akzeptiert und durch Reduzieren ausgewertet wird x + y
.