1、局部化函数、变量化(返回值化)函数;

2、局部化函数的栈捕获外部函数的变量为其上下文;

3、序列化调用;

4、尾调用,栈优化;

 

尾调用

In computer science, a tail call is a subroutine call performed as the final action of a procedure.

如果在某个函数的末尾调用了另一个函数,这个调用就称为尾调用。

我们举个例子吧,

(define (f a)

  (display a)

  (g 2))

 

(define (g b)

  (display b))

 

(f 1)

我们看到,函数f的末尾调用了函数g,(g 2)。

尾调用有什么好处呢?

一个基本的事实是,如果g是f的尾调用,g就可以不返回到f中,

而直接返回到f该返回的地方。

因为g是f的尾调用,g后面没有其他调用了,

(g 2)调用结束后就可以不必返回到f的函数体中了,而是直接返回到(f 1)处。

因此,调用g的时候,调用栈可以不增加,而是直接废弃f的调用环境即可。

注意,我们上面提到的是『不必返回到f的函数体中』,

因为不是每个语言都可以做到这一点,

这个语言特性,称为尾调用优化(tail call optimization)。

 

https://zhuanlan.zhihu.com/p/34064655

------------------越是喧嚣的世界,越需要宁静的思考------------------ 合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。 积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。