callcc

    3热度

    1回答

    我沿着纸条在球拍上学习call/cc继续举例:异常,时间旅行搜索,生成器,线程和协程1。 该论文提到最有利的API是通过提供程序lambda (cc) (cc cc)从call/cc得出的。我明白这个具体的call/cc调用返回当前延续的第一类对象到主程序。 在下面的例子中,该文件调用了所有这些(right-now)。 我看到的是,在同一个示例中,上述call/cc调用返回的对象cc总是在后面运行

    8热度

    2回答

    Ruby的callcc捕获当前的继续,可以随后调用它来恢复控制,但不是数据。我想要捕捉当前的延续以及当前的内存形象。 在我看来,捕获堆应该不是很困难;我可以依靠ObjectSpace::each_object和ObjectSpace::dump_all或Marshal.dump或简单地Object.clone。但是,我没有看到任何直接的方法来恢复堆。理想情况下,我想遍历object_id -> o

    5热度

    3回答

    继续描述接下来发生的一些事情,对吧? 这不仅仅是一个函数,它需要一个值并进行一些计算? (+ (* 2 3) 5) 的(* 2 3)的延续,是(+ _ 5) (define k (lambda (v) (+ v 5))) 什么是这里使用call/cc,而不是使用功能k点?

    1热度

    2回答

    请看一看two-in-a-row*?功能在第19章 我的问题是关于在get-first辅助函数的(leave '())。请注意,(waddle l)将返回'()或原子,这表明列表已用尽或列表中的原子被检索到。 没有(leave '())它仍然会返回这两种值,只是不使用延续leave。但书中说没有(leave '())是坏的,我只是不明白为什么。 ​​3210 非常感谢。 关于这个问题的另一个有趣的

    7热度

    1回答

    考虑函数quux的Haskell中的以下示例以及continuation monad和callCC的定义。 instance Monad (Cont r) where return x = cont ($ x) s >>= f = cont $ \c -> runCont s $ \x -> runCont (f x) c callCC :: ((a -> Cont r b

    2热度

    1回答

    以下两个代码块的应该(在我心中)是无限循环 这工作 (define call/cc call-with-current-continuation) (define l 0) (define i 0) ((lambda() (call/cc (lambda (k) (set! l k))) (write i) (newline)

    1热度

    2回答

    我遇到了一个使用call/cc解释Continuations的片段。在下面提供的片段中,call/cc调用的fn的延续是整个let块还是调用/ cc下面的行?也有人可以提供一个解释,为什么不提供整个let块作为延续? #lang racket (define resume-test-3 #f) (define test-3 (lambda() ; the let defines a

    1热度

    1回答

    请考虑以下定义。我正在使用Racket。 (define fact/k (lambda (n k) (cond ((zero? n) (call/cc (lambda (f) (k f)))) (else (* n (fact/k (sub1 n) k)))))) (define five (call/cc (lambda (k) (fact/k 5

    0热度

    1回答

    在过去的几天里,我一直在玩弄计划(特别是诡计)的延续,并且对于某些函数的结果感到有点困惑并且想知道是否任何人都可以解释到底发生了什么。 有一个名为(get-token)将在一个给定的文件检索发现旁边标记功能。例如,如果接下来的3个标记是“a”,“b”和“c”,调用(get-token)将在第一次调用时返回“a”,第二次调用时返回“b”和“c”第三次被称为。 我想要做的是有一个函数(peek-tok

    3热度

    1回答

    我正在尝试审查课程的幻灯片。代码应该打印“早期工作”一次,然后“后来工作”两次(可以设置后续工作的重复次数)。但我想知道为什么这个代码不起作用,我该如何修改代码?由于现在的代码会产生“以后的工作”,而不是2的无限循环(这应该是) require 'continuation' def work p "early work" here = callcc {|here| here}