【问题标题】:Continuation in Scheme with lambda with no arguments使用没有参数的 lambda 在 Scheme 中继续
【发布时间】:2012-11-03 14:42:19
【问题描述】:

所以我正在处理延续并有这样的事情:

(or
    (call/cc (lambda (cont)
           ...
          (if ( ... )
              (cons randomList (lambda() (cont #f)))
              #f)})}
     ( do something else)

我想知道 (lambda() (cont #f)) 和 (cont #f) 之间的区别是什么。我用 lambda 得到了我想要的答案,没有问题。有人可以解释其中的区别吗?谢谢。

【问题讨论】:

    标签: scheme continuations


    【解决方案1】:

    以这种方式使用的 nullary(零参数)lambda 称为 thunk

    Scheme 中使用 Thunk 来延迟某些代码的执行。例如,假设我们谈论的是(display #f) 而不是(cont #f)。如果你直接写(display #f),那么当代码执行到那个点时,它会立即显示#f,而如果你把它包裹在一个thunk((lambda () (display #f)))中,它就不会显示#f直到你调用了 thunk。

    回到您的代码,代码中的(cont #f) 将导致在调用延续的点立即跳转。将其包装在 thunk 中会延迟调用 continuation,直到您调用 thunk。

    【讨论】:

    • 感谢您的解释。所以这意味着 (do something else) 将在稍后调用 thunk 时被调用。这是正确的吗?
    • 对,根据我对您的代码的理解,情况似乎是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2015-08-28
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    相关资源
    最近更新 更多