Y組合子

Y組合子要解決的問(wèn)題是如何用純正的lambda表達(dá)式實(shí)現(xiàn)遞歸
以階乘為例,可以采用下面的代碼以遞歸的形式表達(dá):

f n = if n > 1 then n * f (n-1) else 1

要求一個(gè)自然數(shù)n的階乘只要調(diào)用f n即可
上述代碼包含了一個(gè)賦值語(yǔ)句喉悴,而純正的lambda表達(dá)式是沒(méi)有賦值語(yǔ)句的,那么用純正的lambda表達(dá)式能否實(shí)現(xiàn)遞歸呢疮绷?

可以猜測(cè)能求階乘的函數(shù)有很多個(gè),比如f n = foldl (*) [1..n]就是其中之一.于是我們將能求階乘的函數(shù)f當(dāng)成一個(gè)變量,這樣定義階乘就變成了求f的值

定義

g f = \n -> if n > 1 then n * f (n-1) else 1

先給出結(jié)論: f能求階乘的充分必要條件是g f == f(==表示等效,下同)

下面不嚴(yán)謹(jǐn)?shù)刈C明一下:

  • 必要性
    假設(shè)f能計(jì)算階乘,那么將g應(yīng)用于f可得一個(gè)新的函數(shù)g f, 即\n -> if n > 1 then n * f (n-1) else 1, ,f能計(jì)算階乘,由階乘的定義, g f必然也能計(jì)算階乘,也就是g f == f

  • 充分性
    如果g f == f, 那么通過(guò)代換可以得到f == \n -> if n > 1 then n * f (n-1) else 1,這就是我們?cè)谏厦娼o出的階乘的遞歸定義形式,可以確定這樣的f是能計(jì)算出階乘的,通過(guò)數(shù)學(xué)歸納法可以證明

綜上, 可以知道g f == f是f能計(jì)算階乘的充分必要條件

那么問(wèn)題就變成了"求方程g f == f的解"

很顯然f應(yīng)該是一個(gè)關(guān)于g的函數(shù),那么Y組合子其實(shí)就是這個(gè)函數(shù): f == Y g

但是具體怎么求這個(gè)解就太難了,作為民科的我只能利用前輩們留下的結(jié)論自己慢慢湊

f應(yīng)該是gen gen這樣的形式,gen滿足

gen = \x -> g (x x)

于是gen gen = g gen gen

這樣就找到了g的不動(dòng)點(diǎn)

現(xiàn)在我們開始構(gòu)造Y組合子:
由上面的討論可以知道Y g == f == gen gen == g gen gen

Y g = g gen gen

Y g = gen gen

Y g = (\x -> g (x x)) (\x -> g (x x))

由此便得到了Y組合子

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抠蚣,一起剝皮案震驚了整個(gè)濱河市概说,隨后出現(xiàn)的幾起案子网梢,更是在濱河造成了極大的恐慌震缭,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件战虏,死亡現(xiàn)場(chǎng)離奇詭異拣宰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)烦感,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門巡社,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人手趣,你說(shuō)我怎么就攤上這事晌该。” “怎么了绿渣?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵气笙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我怯晕,道長(zhǎng),這世上最難降的妖魔是什么缸棵? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任舟茶,我火速辦了婚禮,結(jié)果婚禮上堵第,老公的妹妹穿的比我還像新娘吧凉。我一直安慰自己,他們只是感情好踏志,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布阀捅。 她就那樣靜靜地躺著,像睡著了一般针余。 火紅的嫁衣襯著肌膚如雪饲鄙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天圆雁,我揣著相機(jī)與錄音忍级,去河邊找鬼。 笑死伪朽,一個(gè)胖子當(dāng)著我的面吹牛轴咱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼朴肺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼窖剑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起戈稿,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤西土,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后器瘪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翠储,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年橡疼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了援所。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡欣除,死狀恐怖住拭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情历帚,我是刑警寧澤滔岳,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站挽牢,受9級(jí)特大地震影響谱煤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜禽拔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一刘离、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧睹栖,春花似錦硫惕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至曼氛,卻和暖如春豁辉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搪锣。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工秋忙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人构舟。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓灰追,卻偏偏與公主長(zhǎng)得像堵幽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弹澎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容