`call/cc` 的函数参数是用 CPS 编写的吗?

2 lisp scheme continuations callcc continuation-passing

的参数call/cc是一个过程,其参数是一个延续。程序是用CPS 写的吗?

Wil*_*ess 5

不。

CPS 风格的函数期望其他普通函数作为它们的参数,并且可以在尾部位置调用它们。这些函数在 Scheme 白话中被混淆地称为“continuations”。我更喜欢“偶然事件”,以消除歧义。

参数函数call/cc需要一个实际的未定界的延续作为它的参数。那个实际的延续不是一个函数。用一个值调用它会将该值返回到该延续的返回上下文中,从而与延续一起保存——这是简单函数闻所未闻的壮举。

尾调用函数将其结果返回到其调用函数的调用者的上下文中。

被调用的延续将提供的值返回到其创建call/cc调用的上下文。因此它不是一个函数。因此使用它的函数不是用 CPS 编写的。