**CPS就是 continuation-passing style **
;普通形式
(define (pyth x y) (sqrt (+ (* x x) (* y y))))
;CPS形式
(define (pyth& x y k)
(*& x x (lambda (x2)
(*& y y (lambda (y2)
(+& x2 y2 (lambda (x2py2)
(sqrt& x2py2 k))))))))
看到?jīng)]有CPS形式都有一個(gè)回調(diào)函數(shù)源内,也叫 its continuation .所以pyth函數(shù)在最后一步執(zhí)行了回調(diào)函數(shù)k嗽交,參數(shù)來(lái)源于前面幾部的結(jié)果 所以CPS又叫尾遞歸
那好處是什么呢 盒让,我的理解就是在執(zhí)行最后一步回調(diào)函數(shù)k之前邑茄,堆棧中的所有空間都可以清空,留給函數(shù)k。
這樣我們把如果能把復(fù)雜問(wèn)題用尾遞歸的形式來(lái)表達(dá)秕硝,意味著整個(gè)程序的控制流都被你這個(gè)函數(shù)顯式的描述了远豺。
再來(lái)思想跳躍一下姆吭,這個(gè)的終極應(yīng)用是什么呢厘擂,如果我們的編譯器可以將我們的程序通過(guò)某種變換全部轉(zhuǎn)為CPS形式,這樣復(fù)雜的遞歸問(wèn)題就會(huì)變?yōu)椋詈笠徊胶?jiǎn)單優(yōu)化為Goto 的問(wèn)題,明白了沒(méi)有甘晤,但編譯原理還不止這些塞弊,但CPS變換絕對(duì)是這里面很關(guān)鍵的概念。