generated at
継続渡しとCPSの差異
継続渡しとCPSの差異
一応『プログラミングGauche』に倣って、「継続渡し」と「CPS」を区別して使っているmrsekut
関数は引数に関数を取ることもあり、その全てを継続渡しにする必要はない
良い例は『プログラミングGauche』 19.2のfind-fold2関数
lisp
(define (find-fold2 pred? proc/cont seed lis) (cond [(null? lis) seed] [(pred? (car lis)) (proc/cont (car lis) seed (lambda (seed2) (find-fold2 pred? proc/cont seed2 (cdr lis))))] [else (find-fold2 pred? proc/cont seed (cdr lis))]))
これは第2引数のproc/contは継続渡しになっているが、
find-fold2自体、pred、は継続渡しではない
出現している3つの関数の内の1つだけを継続渡ししてる
これと対比して、出現する関数全てを継続渡しにしたものを特にCPSと呼ぶことにしている
でも別にこれが厳密な定義でもないと思うmrsekut
継続渡しと言えばCPSとイコールだよというノリで書いている記事もたくさん見るし
でもこれが逆にわかりにくさが増している気がするので、mrsekutはこれを区別して呼ぼうと思う
原典みたいなものに当たって明確にイコールだよと言及しているものを観測すれば書き直すmrsekut