我正在尝试编写一个调用自身的lambda表达式,但我似乎无法找到任何语法,即使它是可能的.
基本上我想将以下函数转移到以下lambda表达式中:(我意识到它是一个愚蠢的应用程序,它只是添加,但我正在探索我可以用python中的lambda表达式做什么)
def add(a, b):
if a <= 0:
return b
else:
return 1 + add(a - 1, b)
add = lambda a, b: [1 + add(a-1, b), b][a <= 0]
Run Code Online (Sandbox Code Playgroud)
但调用lambda形式的add会导致运行时错误,因为达到了最大递归深度.甚至可以在python中执行此操作?或者我只是犯了一些愚蠢的错误?哦,我正在使用python3.0,但我认为这不重要吗?
我是一个介绍C++类的TA.上周在测试中询问了以下问题:
以下程序的输出是什么:
int myFunc(int &x) {
int temp = x * x * x;
x += 1;
return temp;
}
int main() {
int x = 2;
cout << myFunc(x) << endl << myFunc(x) << endl << myFunc(x) << endl;
}
Run Code Online (Sandbox Code Playgroud)
对我和我的所有同事来说,答案显然是:
8
27
64
Run Code Online (Sandbox Code Playgroud)
但是现在有几个学生已经指出,当他们在某些环境中运行时他们实际上是相反的:
64
27
8
Run Code Online (Sandbox Code Playgroud)
当我在我的Linux环境中使用gcc运行它时,我得到了我期望的结果.在我的Windows机器上使用MinGW,我得到了他们正在谈论的内容.它似乎是先评估对myFunc的最后一次调用,然后是第二次调用然后是第一次调用,然后一旦它具有所有结果,它就按正常顺序输出它们,从第一次开始.但由于呼叫是按顺序进行的,因此数字相反.
在我看来,它是一个编译器优化,选择以相反的顺序评估函数调用,但我不知道为什么.我的问题是:我的假设是否正确?这是背景中发生的事吗?或者有什么完全不同的东西?另外,我真的不明白为什么向后评估函数然后评估输出前进会有好处.由于ostream的工作方式,输出必须是前进的,但似乎功能的评估也应该是前进的.
谢谢你的帮助!