我面对这段代码
let quadruple x =
let double x =
x * 2
Run Code Online (Sandbox Code Playgroud)
并且提到 四倍调用双重函数两次以执行(低效)四倍.
怎么会发生?我认为四倍得到x然后x将被传递给在四倍中定义的double.因此,它必须作为堆栈工作.
它首先计算x*2然后将结果返回到四元组并且结束.
那么为什么quadruple会调用double函数两次
原始代码段缺少一行.它必须如下所示:
let quadruple x =
let double x =
x * 2
double(double x)
Run Code Online (Sandbox Code Playgroud)
这样写,double只是内部定义的子功能quadruple.这只是一个定义.除非被召唤,否则它什么都不做.
最后一行属于quadruple.确实,首先double使用x参数调用,然后使用接收到的结果再次调用它,实际上使原始值翻两番.