【问题标题】:How does this call/cc expression work?这个 call/cc 表达式是如何工作的?
【发布时间】:2014-12-12 13:13:37
【问题描述】:

我在 Racket 上尝试这个,它给出的答案是 5。但我似乎无法弄清楚它是如何得到答案的。

((call/cc call/cc) (lambda (x) 5)) 

我把它展开如下。

((call/cc (lambda (k) (call/cc (lambda (k1) (k k1))))) (lambda (x) 5))

假设扩展是正确的,我仍然不明白当 k 延续应用于 k1 延续时会发生什么,以及它如何执行外部 lambda 以产生 5。

【问题讨论】:

    标签: lambda scheme racket callcc


    【解决方案1】:

    (k k1) 将返回 k1 作为外部 call/cc 的返回值。然后当您调用k1(作为(... (lambda (x) 5)) 的一部分)时,返回5 作为内部call/cc 的返回值,然后返回(这次作为正常返回)作为外部@ 的返回值987654327@.

    对不起,那是一口。 :-)

    【讨论】:

    • 只是为了确认我对解释的理解。 (k k1) 返回 k1。然后 (k1 (lambda (x) 5)) 发生。返回 (lambda (x) 5)。然后 ((lambda (x) 5) (lambda (x) 5)) 发生产生 5。我猜对了吗?
    • 是的,这听起来很合理。
    • 太棒了。所以在这种情况下,k 和 k1 延续几乎是一样的,对吧?
    • 它们不是相同的延续(一个返回到外部call/cc 的调用者,另一个返回到内部call/cc 的调用者),但它们的效果非常相似,您可以这么想吧。
    猜你喜欢
    • 2016-03-21
    • 1970-01-01
    • 2020-04-10
    • 2018-04-03
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多