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)))的意义上,之后将发生的一切。我们将
值设置为该延续<代码>呼叫/cccont
- 由于
现在是一个表示延续的函数,它的参数是“call/cc的返回值”,我们只调用该函数,该参数被忽略,我们需要再次调用cont
(cont#f)
因此,我们最终得到的是无限循环。因此,在本例中cont的三种用法中,我们得到了它:(1)被定义为布尔值#f,(2)被设置为连续值k,(3)被调用为带有布尔参数#f?@Chris的函数。是的。但是#f只是一个伪值。我们可以有空值或任何内容,因为在这两种情况下它都会被忽略。我正在接受它,但我们还没有到达那里。:)