讓我們考慮一個階乘函數的一個簡單的例子,寫的僞像CPS式(枚舉的中間結果&排序被省略了,因爲會很吵):調用延續VS函數調用
(def (fact n k) (if (eq? n 0) (k 1) (fact (- n 1) (\result (k (* n result))))))
調用延續(k 1)(即「返回」一個值)在技術上與「正常」函數調用不同,就像在else分支中一樣嗎?我想到的一件事是,在這種情況下,延續是唯一沒有其他延續的論點:)
另外,你能說這個計算類似於DFS樹步行一個動態構造的樹,當前的計算是當前探索的節點,「其他未開發的分支」是調用堆棧/繼續?
延續的要點是它們不會返回。他們是'Goto',而不是'Call'。 – Bergi
沒有區別,它只是一個常規功能。 – molbdnilo