Задать вопрос
@yul12

Декаррирование / Uncurrying: как работает на лямбда исчислении?

Доброго времени дня!

Может ли добрая душа помочь разобраться в обратном процессе каррирования ? Каррирование хорошо объяснено на примерах в разных языках, а вот о декаррировании только информация, что это транформация противоположная каррированию. Как декаррировать на примере чистого лямбда исчисления?

Благодарю заранее за отклики!
  • Вопрос задан
  • 133 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Функциональное программирование
Седой и строгий
Если на примере чистого лямбда-исчисления, то
define Head = λg . g (λa . λb . a)
define Tail = λg . g (λa . λb . b)
define Uncurry = λf . λp . f (head p) (tail p)

Вы уверены, что оно вам именно в таком виде надо, если вы саму концепцию не понимаете?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AlexSku
не буду отвечать из-за модератора
Примеры на Haskell.
Возьмём функцию min, которая ждёт двух аргументов, а приходит кортеж (пара). Вот uncurry позволяет функции обрабатывать кортеж:
min 1 2        -- результат 1
uncurry f (x,y) = f x y
-- применение
uncurry min (1,2)   -- результат 1

Если определение записать в виде лямбда, то:
uncurry = \ f (x,y) -> f x y
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы