所以我正在处理延续,并且有类似的东西:
(or
(call/cc (lambda (cont)
...
(if ( ... )
(cons randomList (lambda() (cont #f)))
#f)})}
( do something else)
我想知道(lambda()(续#f))和(cont #f)之间的区别是什么。我得到了我想要的lambda和一些错误的答案。有人可以解释这个区别吗?感谢。
答案 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。