В настоящее время хорошо известная теорема лямбда-исчисления о том, что любая функция, принимающая два или более аргумента, может быть записана посредством каррирования как цепочки функций, принимающих один аргумент:
# Pseudo-code for currying
f(x,y) -> f_curried(x)(y)
Это оказалось чрезвычайно эффективным не только в изучении поведения функций, но и в практическом использовании (Haskell и т.д.).
Функции, возвращающие значения, однако, не обсуждаются. Программисты обычно имеют дело с их невозможностью вернуть более одного значения из функции, возвращая некоторый метаобъект (списки в R, структуры на С++ и т.д.). Это всегда поражало меня как немного клочья, но полезного.
Например:
# R code for "faking" multiple return values
uselessFunc <- function(dat) {
model1 <- lm( y ~ x , data=dat )
return( list( coef=coef(model1), form=formula(model1) ) )
}
Вопросы
- Есть ли в лямбда-исчислении что-нибудь сказать о множестве возвращаемых значений? Если да, сделайте какие-нибудь неожиданные выводы?
- Аналогичным образом, позволяют ли какие-либо языки использовать истинные множественные возвращаемые значения?