Ari*_*man 12 r lambda-calculus return-value
现在是lambda演算的一个众所周知的定理,任何带有两个或多个参数的函数都可以通过currying作为一个带有一个参数的函数链来编写:
# Pseudo-code for currying
f(x,y) -> f_curried(x)(y)
Run Code Online (Sandbox Code Playgroud)
事实证明,这不仅在研究函数的行为方面,而且在实际应用中都非常强大(Haskell等).
但是,似乎没有讨论返回值的函数.程序员通常通过返回一些元对象(R中的列表,C++中的结构等)来处理它们无法从函数返回多个值.它总是让我觉得有点像一个kludge,但它是一个有用的.
例如:
# R code for "faking" multiple return values
uselessFunc <- function(dat) {
model1 <- lm( y ~ x , data=dat )
return( list( coef=coef(model1), form=formula(model1) ) )
}
Run Code Online (Sandbox Code Playgroud)
问题
根据关于lambda演算的维基百科页面:
Lambda演算也写成λ演算,是函数定义,函数应用和递归的形式系统
和数学意义上的函数:
关联一个数量,函数的参数,也称为输入,与另一个数量,函数的值,也称为输出
所以回答你的第一个问题不,lambda演算(或任何其他基于数学函数的形式)不能有多个返回值.
对于你的第二个问题,据我所知,实现多个返回值的编程语言是通过将多个结果打包到某种数据结构(无论是元组,数组,甚至堆栈)然后再解压缩来实现的.这就是差异所在,因为一些编程语言使得打包/解包部分对程序员是透明的(例如Python使用引擎盖下的元组),而其他语言使程序员明确地完成工作,例如Java程序员可以模拟多个返回通过在返回的Object数组中打包多个结果然后手动提取和转换返回的结果,可以在某种程度上获得值.