Codziennie czytam artykuły na temat programowania funkcjonalnego i staram się stosować jak najwięcej praktyk. Ale nie rozumiem, co jest wyjątkowego w curry lub częściowym stosowaniu.
Weź ten kod Groovy jako przykład:
def mul = { a, b -> a * b }
def tripler1 = mul.curry(3)
def tripler2 = { mul(3, it) }
Nie rozumiem, jaka jest różnica między tripler1i tripler2. Czy oba nie są takie same? „Curry” jest obsługiwane w czystych lub częściowych językach funkcjonalnych, takich jak Groovy, Scala, Haskell itp. Ale mogę zrobić to samo (lewe curry, prawe curry, n-curry lub częściowe zastosowanie), po prostu tworząc inny nazwany lub anonimowy funkcja lub zamknięcie, które przekaże parametry do pierwotnej funkcji (jak tripler2) w większości języków (nawet C.)
Czy coś mi umyka? Są miejsca, w których mogę używać curry i częściowej aplikacji w mojej aplikacji Grails, ale waham się, aby to zrobić, ponieważ zadaję sobie pytanie „Jak to inaczej?”
Proszę, oświeć mnie.
EDYCJA: Czy mówicie, że częściowa aplikacja / curry jest po prostu bardziej wydajna niż tworzenie / wywoływanie innej funkcji, która przekazuje domyślne parametry do pierwotnej funkcji?
f x y = x + yoznacza, że fjest to funkcja, która przyjmuje jeden parametr int. Wynik f x( fzastosowany do x) jest funkcją, która przyjmuje jeden parametr int. Wynik f x y(lub (f x) ynp. f xZastosowany y) jest wyrażeniem, które nie przyjmuje parametrów wejściowych i jest oceniane przez redukcję x + y.