继续传递风格vs monads
连续传递样式(cps)和monad之间有什么区别。
没有找到相关结果
已邀请:
4 个回复
撵穆
monad
因此,一旦遇到
,计算就会停止,这里没什么新东西。让我们尝试使用CPS模仿这种monadic行为: 这是我们使用CPS的vanilla
功能。我们在这里使用所有
而不是algebric数据类型来使它更容易:
注意它与monad有多相似
好。假设我们希望计算的上限为10.也就是说,当下一步导致值大于10时,任何计算必须停止。这有点像说“一个可能的计算必须停止并且尽快返回
”链中的任何值都是
)。让我们看看如何通过编写“CPS变换器”来做到这一点。
请注意,最终返回值可以是
,但这很好,因为评估在第3步(
)停止。 我们可以看到
用一些额外的逻辑“包裹”正常的延续。这与monad非常接近 - 将计算与一些额外的逻辑相结合。 让我们更进一步:
WOA!也许我们刚刚发明了
monad! 现在,如果我们查看Cont的源代码,我们会看到
是
的类型是
哪个与我们的类型相吻合 现在实际回答这个问题 现在输入所有这些后我重读了原始问题。 OP要求“差异”:P 我猜不同的是CPS给调用者更多的控制权,而monad中的
通常由monad的作者完全控制。
街茬
稼悸
队辅坟阮阶