【发布时间】:2016-12-11 11:37:50
【问题描述】:
让我们考虑一个简单的阶乘函数示例,用类似 CPS 的伪风格编写(省略了中间结果的枚举和排序,因为会很吵):
(def (fact n k) (if (eq? n 0) (k 1) (fact (- n 1) (\result (k (* n result))))))
调用延续(k 1)(即“返回”一个值)在技术上与“正常”函数调用有何不同,例如在 else-branch 中?我想到的一件事是,在这种情况下,延续是唯一在它的论点中没有另一个延续的东西:)
另外,你能说这个计算类似于动态构造树的 DFS 树遍历,当前计算是当前探索的节点,“其他未探索的分支”是调用堆栈/延续?
【问题讨论】:
-
延续的意义在于它们不会返回。他们是
Goto,而不是Call。 -
没什么区别,就是普通函数。
标签: functional-programming continuations