Я щодня читав статті про функціональне програмування і намагався якомога більше застосувати деякі практики. Але я не розумію, що є унікальним у вигонці або частковому застосуванні.
Візьмемо цей приклад Groovy як приклад:
def mul = { a, b -> a * b }
def tripler1 = mul.curry(3)
def tripler2 = { mul(3, it) }
Я не розумію, в чому різниця між tripler1
і tripler2
. Хіба вони не однакові? 'Currying' підтримується чистими або частковими функціональними мовами, такими як Groovy, Scala, Haskell і т. Д. Але я можу зробити те ж саме (лівий каррі, правий каррі, n-каррі або частковий додаток), просто створивши інший названий або анонімний функція або закриття, яке пересилатиме параметри до вихідної функції (як tripler2
) у більшості мов (навіть C.)
Я щось тут пропускаю? Є місця, де я можу використовувати каррі та часткове застосування в моїй програмі Grails, але я вагаюся, тому що я запитую себе "Як це по-іншому?"
Будь ласка, просвіти мене.
EDIT: Ви, хлопці, говорите, що часткове застосування / каррінг просто ефективніше, ніж створення / виклик іншої функції, яка пересилає параметри за замовчуванням до початкової функції?
f x y = x + y
означає, що f
це функція, яка приймає один int параметр. Результат f x
( f
застосований до x
) - це функція, яка приймає один int параметр. Результат f x y
(або (f x) y
, наприклад, f x
застосований до y
) - це вираз, який не приймає вхідних параметрів і оцінюється шляхом зменшення x + y
.