推導(dǎo)到這里,是不是已經(jīng)感覺到脊背嗖涼了一下,反正筆者我第一次接觸在 康托爾、哥德爾、圖靈——永恒的金色對角線 這篇文章里接觸到的時候,整個人瞬間被這種以數(shù)學(xué)語言去表示程序的方式所折服。
來,我們回憶下,我們最終是不是得到了一個不定點算子,這個算子可以找出一個高階函數(shù)的不動點 f(Y(f)) = Y(f)
。 將一個函數(shù)傳入一個算子(函數(shù)),得到一個跟自己功能一樣,但又并不是自己的函數(shù),這個說法有些拗口,但又味道十足。
好了,我們回到最初的問題,怎么完成匿名函數(shù)的遞歸呢?有了Y組合子就很簡單了:
/*求不動點*/(f => f(f))/*以不動點為參數(shù)的遞歸函數(shù)*/(fact => n => n <= 1 ? 1 : n * fact(fact)(n - 1)) /*遞歸函數(shù)參數(shù)*/ (5)// 120