标签: continuations

用于Scala延续

人们如何在Scala中使用更大规模的延续?

Scala标准库的任何部分都是用CPS编写的吗?

使用延续是否有任何重大的性能损失?

continuations scala

17
推荐指数
2
解决办法
932
查看次数

是延续单子吗?

可以说延续是monad吗?它们是monad的子集还是仅仅是实现monad的一种方式?

编辑:或者也许我弄错了,monads是一个比延续更抽象的概念?(所以我真的把苹果与橘子比较)

monads continuations functional-programming

16
推荐指数
3
解决办法
4071
查看次数

序列化和Yield语句

是否可以序列化包含yield语句的方法(或包含此类方法的类),以便在对类进行重新水化时,保留生成的迭代器的内部状态?

.net c# continuations yield yield-return

16
推荐指数
2
解决办法
1810
查看次数

继续传递类​​型的样式表示

假设我们有一个单子,通过定义return,(>>=)以及一套法律.有一种数据类型

newtype C m a = C { unC ? forall r. (a ? m r) ? m r }
Run Code Online (Sandbox Code Playgroud)

也称为密度.C m a ? m a鉴于这m是一个Monad,即我们可以编写两个函数to ? Monad m ? m a ? C m afrom ? Monad m ? C m a ? m a

to ? Monad m ? m a ? C m a
to t = C $ \f ? t …
Run Code Online (Sandbox Code Playgroud)

continuations haskell continuation-passing

15
推荐指数
1
解决办法
922
查看次数

在继续传递风格和记忆之间进行选择

在以函数式语言编写memoization和continuation传递样式(CPS)函数的示例时,我最终使用了Fibonacci示例.然而,Fibonacci并没有真正受益于CPS,因为循环仍然必须经常以指数方式运行,而memoization它的第一次只有O(n)而后一次只有O(1).

结合CPS和记忆化既有的斐波那契数略有好处,但有没有解决,其中CPS是防止你用尽堆栈的最佳方式的例子,并提高了性能并在记忆化是不是一个解决方案?

或者:是否有何时选择其中一个或两者的指南?

continuations f# ocaml functional-programming memoization

15
推荐指数
1
解决办法
2400
查看次数

正确的延续术语

我最近一直在寻找延续,我对正确的术语感到困惑.Gabriel Gonzalez 在这里说:

Haskell延续具有以下类型:

newtype Cont r a = Cont { runCont :: (a -> r) -> r }
Run Code Online (Sandbox Code Playgroud)

即整个(a -> r) -> r事情是延续(没有包装)

维基百科的文章,似乎说支持这个想法

延续是计算机程序的控制状态的抽象表示.

但是,这里作者说

Continuations是表示"要执行的剩余计算"的函数.

但这只是(a->r)Cont类型的一部分.这与Eugene Ching 在这里所说的一致:

计算(函数),需要一个连续函数才能完全评估.

我们将会看到很多这样的功能,因此,我们会给它一个更直观的名称.我们叫他们等待功能.

我已经看到了另一个教程(Brian Beckman和Erik Meijer),他们调用了整个事物(等待函数)observable以及它完成观察者所需的函数.

  • 什么是延续,(a->r)->r东西或只是(a->r)东西(没有包装)?
  • 措辞可观察/观察者是否正确?
  • 以上的引用是否真的相互矛盾,是否有一个共同的事实?

continuations haskell

15
推荐指数
2
解决办法
751
查看次数

可以为continuation monad变换器提供一些带有一些和很多的替代实例吗?

我们可以将continuation monad变换器定义为

data Cont r m a = Cont {run :: (a -> m r) -> m r}
Run Code Online (Sandbox Code Playgroud)

Cont r m如果mAlternativevia 的成员,我们可以给出Alternative实例

empty = Cont $ \f -> empty
ca <|> cb = Cont $ \f -> run ca f <|> run cb f
Run Code Online (Sandbox Code Playgroud)

然后允许somemany采用他们的默认方法.我的问题是,我们可以定义somemany在以下方面msomemany,而不是默认的定义是什么?显而易见的选择

some ca = Cont $ \f -> some $ run ca f
many ca = Cont …
Run Code Online (Sandbox Code Playgroud)

continuations haskell typeclass applicative continuation-passing

15
推荐指数
1
解决办法
474
查看次数

生成器/块到迭代器/流转换

基本上我想转换这个:

def data(block: T => Unit)
Run Code Online (Sandbox Code Playgroud)

到Stream(dataToStream是执行此转换的假设函数):

val dataStream: Stream[T] = dataToStream(data)
Run Code Online (Sandbox Code Playgroud)

我想这个问题可以通过延续来解决:

// let's assume that we don't know how data is implemented
// we just know that it generates integers
def data(block: Int => Unit) { for (i <- 0 to 10) block(i) }

// here we can print all data integers
data { i => println(i) }

// >> but what we really want is to convert data to the stream <<

// very dumb solution is …
Run Code Online (Sandbox Code Playgroud)

continuations scala yield generator callback

14
推荐指数
2
解决办法
3313
查看次数

只能用lambdas和闭包来实现call-with-current-continuation?

有谁知道是否call/cc可以用lambdas和闭包实现?

它似乎会call/cc中断程序的流程(就像异常一样),但lambdas和闭包不能这样做.因此我认为call/cc无法通过lambdas和闭包实现.

还有什么想法吗?

lisp scheme continuations computer-science callcc

14
推荐指数
2
解决办法
2751
查看次数

Scala中的"call-cc"模式?

我发现了一篇关于call with current continuation模式的好文章.据我所知,他们使用Scheme和undelimited continuations.文章中的模式可以在Scala中实现吗?是否有关于delimited continuationsScala模式的文章?

continuations scala

14
推荐指数
1
解决办法
1066
查看次数