推导到这里,是不是已经感觉到脊背嗖凉了一下,反正笔者我第一次接触在 康托尔、哥德尔、图灵——永恒的金色对角线 这篇文章里接触到的时候,整个人瞬间被这种以数学语言去表示程序的方式所折服。
来,我们回忆下,我们最终是不是得到了一个不定点算子,这个算子可以找出一个高阶函数的不动点 f(Y(f)) = Y(f)
。 将一个函数传入一个算子(函数),得到一个跟自己功能一样,但又并不是自己的函数,这个说法有些拗口,但又味道十足。
好了,我们回到最初的问题,怎么完成匿名函数的递归呢?有了Y组合子就很简单了:
/*求不动点*/(f => f(f))/*以不动点为参数的递归函数*/(fact => n => n <= 1 ? 1 : n * fact(fact)(n - 1)) /*递归函数参数*/ (5)// 120