使用没有参数的lambda继续Scheme

时间:2012-11-15 01:03:34

标签: scheme continuations

所以我正在处理延续,并且有类似的东西:

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

我想知道(lambda()(续#f))和(cont #f)之间的区别是什么。我得到了我想要的lambda和一些错误的答案。有人可以解释这个区别吗?感谢。

1 个答案:

答案 0 :(得分:1)

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

在Scheme中使用Thunk来推迟执行某段代码。例如,假设我们讨论的是(display #f)而不是(cont #f)。如果您直接编写(display #f),那么当代码执行到达该点时,它会立即显示#f,而如果您将其包装在thunk((lambda () (display #f)))中,它就不会t显示#f,直到你调用thunk。

回到你的代码,代码中的(cont #f)将导致在调用continuation的位置立即跳转。将它包装在thunk中会延迟调用continuation,直到你调用thunk。