Functional programming 有人能在计划中解释一下这个延续吗?

Functional programming 有人能在计划中解释一下这个延续吗?,functional-programming,scheme,continuations,Functional Programming,Scheme,Continuations,我正在学习连续体,但我无法理解这段代码。为什么它会进入无限循环 (let ((cont #f)) (call/cc (lambda (k) (set! cont k))) (cont #f)) 逐行: 我们定义局部变量cont 我们用当前延拓调用一些lambda函数,也就是说,我们将当前延拓作为参数传递给lambda函数。当前延续是1个参数的函数,然后将此参数用作call/cc的“返回值”(此处最终被忽略) 因此,k在这里表示一切,在我们的例子中,在(lam

我正在学习连续体,但我无法理解这段代码。为什么它会进入无限循环

(let ((cont #f))
  (call/cc (lambda (k)
             (set! cont k)))
  (cont #f))
逐行:

  • 我们定义局部变量
    cont
  • 我们用当前延拓调用一些lambda函数,也就是说,我们将当前延拓作为参数传递给lambda函数。当前延续是1个参数的函数,然后将此参数用作
    call/cc
    的“返回值”(此处最终被忽略)
  • 因此,
    k
    在这里表示一切,在我们的例子中,在
    (lambda(call/cc-retval)(let()call/cc-retval(cont#f)))的意义上,之后将发生的一切。我们将
    cont
    值设置为该延续<代码>呼叫/cc
    返回
  • 由于
    cont
    现在是一个表示延续的函数,它的参数是“call/cc的返回值”,我们只调用该函数,该参数被忽略,我们需要再次调用
    (cont#f)

因此,我们最终得到的是无限循环。

因此,在本例中cont的三种用法中,我们得到了它:(1)被定义为布尔值#f,(2)被设置为连续值k,(3)被调用为带有布尔参数#f?@Chris的函数。是的。但是#f只是一个伪值。我们可以有空值或任何内容,因为在这两种情况下它都会被忽略。我正在接受它,但我们还没有到达那里。:)