1

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

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

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

4

1 回答 1

1

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

在 Scheme 中使用 Thunk 来延迟某些代码的执行。例如,假设我们正在谈论(display #f)而不是(cont #f). 如果您(display #f)直接编写,那么当代码执行到该点时,它会#f立即显示,而如果您将其包装在 thunk ( ) 中,则在调用 thunk 之前(lambda () (display #f))它不会显示。#f

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

于 2012-11-15T01:54:06.857 回答