函数式编程Y Combinator解疑

      偶然在一篇文章中看到Y Combinator,对于其对lambda函数的不动点的证明,从两条非常简洁的公理出发,巧妙地得出了匿名函数的递归表示,表示非常的感兴趣。但是,对于计算机理论没什么研究的人来说,虽然好像看懂了它是怎么证明出匿名函数的递归,但是如果不深入了解下Y Combinator的背景,就不知道它到底是用来干嘛的,对于个人知识体系来说,它就是一个孤立的点,没法与学到的计算机知识建立任何联系。
为了彻底弄清Y Combinator的来龙去脉,只能去问度娘了。所幸,这个知识点虽然比较偏,但是还是在知乎上找到了答案。这一看答案,简直就像是发现了新大陆一样(博主读书不努力,井底之蛙)。原来,在计算科学领域有一种跟图灵机具有相同计算能力的更加简单的计算模型叫做“lambda演算”。lambda演算是函数式编程的理论基础。而Y Combinator是lambda演算的一部分,用于构造一个匿名递归函数。
对于lambda演算模型,它只有alpha变换和beta规约两种操作,远比图灵机纸带模型要简单,但是却有着和图灵机一样的计算能力。光从数学上证明这一点还不甘心,于是,就有人开始试着用lambda演算构建一个完整的形式逻辑系统,比如著名的“邱奇计数法”(church numeral)。接着很快就遇到了一个问题:lambda演算如何定义递归(或者循环)。我们都知道,递归的意思是一个函数“直接或间接地调用自身”。通俗点理解,就是在函数内部调用函数本身。但是,lambda演算中函数是没名字的,那么如何调用自己呢?这个问题,也可以归结为:“如何构建一个匿名递归函数”。于是,就有了Y Combinator。
最后,附上知乎链接: 函数式编程的 Y Combinator 有哪些实用价值?

你可能感兴趣的:(scala)