Что лямбда-исчисление говорит о возвращаемых значениях?

К настоящему времени хорошо известна теорема лямбда-исчисления, что любая функция, принимающая два или более аргумента, может быть записана посредством каррирования как цепочка функций, принимающих один аргумент:

# Pseudo-code for currying
f(x,y) -> f_curried(x)(y)

Это оказалось чрезвычайно эффективным не только для изучения поведения функций, но и для практического использования (Haskell и т. Д.).

Функции, возвращающие значения, однако, похоже, не обсуждаются. Программисты обычно сталкиваются с невозможностью вернуть более одного значения из функции, возвращая некоторый мета-объект (списки в R, структуры в C ++ и т. Д.). Он всегда казался мне чем-то вроде лабиринта, но полезного.

Например:

# R code for "faking" multiple return values
uselessFunc <- function(dat) {
   model1 <- lm( y ~ x , data=dat )
   return( list( coef=coef(model1), form=formula(model1) ) )
}

Вопросы

  1. Может ли лямбда-исчисление что-нибудь сказать о множественности возвращаемых значений? Если да, то можно ли сделать какие-нибудь неожиданные выводы?
  2. Точно так же, допускают ли какие-либо языки истинные множественные возвращаемые значения?
12
задан Andrie 22 November 2011 в 14:22
поделиться