@jerad.kuphal
Каррирование — это техника функционального программирования, когда функция принимает несколько аргументов, но вместо того чтобы принимать все аргументы одновременно, она принимает первый аргумент и возвращает функцию, которая принимает оставшиеся аргументы. Пример:
1
|
add x y = x + y |
Такая функция принимает два аргумента и возвращает их сумму. Мы можем каррировать ее, чтобы сначала принять один аргумент и вернуть функцию, которая примет второй аргумент:
1
|
add x = (y -> x + y) |
Теперь мы можем использовать эту функцию следующим образом:
1 2 |
add5 = add 5 -- вернет функцию, которая складывает 5 с переданным аргументом add5 3 -- вернет 8 |
Также в Haskell есть комбинаторы, такие как curry
и uncurry
, которые могут помочь в каррировании и разкаррировании функций соответственно. Например:
1 2 |
addTuple = uncurry add -- принимает кортеж из двух аргументов и передает их в функцию add addTuple (2,3) -- вернет 5 |
Каррирование может помочь сделать код более читаемым и удобным, позволяя передавать параметры постепенно и с возможностью переиспользования.
@jerad.kuphal
Каррирование — это техника функционального программирования, когда функция принимает несколько аргументов, но вместо того чтобы принимать все аргументы одновременно, она принимает первый аргумент и возвращает функцию, которая принимает оставшиеся аргументы. Пример:
1 2 |
add :: Int -> Int -> Int add x y = x + y |
Такая функция принимает два аргумента и возвращает их сумму. Мы можем каррировать ее, чтобы сначала принять один аргумент и вернуть функцию, которая примет второй аргумент:
1 2 |
add :: Int -> Int -> Int add x = y -> x + y |
Теперь мы можем использовать эту функцию следующим образом:
1 2 |
add5 = add 5 -- вернет функцию, которая складывает 5 с переданным аргументом add5 3 -- вернет 8 |
Также в Haskell есть комбинаторы, такие как curry
и uncurry
, которые могут помочь в каррировании и разкаррировании функций соответственно. Например:
1 2 |
addTuple = uncurry add -- принимает кортеж из двух аргументов и передает их в функцию add addTuple (2,3) -- вернет 5 |
Каррирование может помочь сделать код более читаемым и удобным, позволяя передавать параметры постепенно и с возможностью переиспользования.