7
我试图总结我的周围连拍和callCC头:均分推理,通过减少该功能绑结
s0 = (flip runContT) return $ do
(k, n) <- callCC $ \k -> let f x = k (f, x)
in return (f, 0)
lift $ print n
if n < 3
then k (n+1) >> return()
else return()
我已经成功地实现了这一点:
s21 = runContT (let f x = ContT $ \_ -> cc (f, x) in ContT ($(f,0))) cc where
cc = (\(k,n) -> let
iff = if n < 3 then k (n+1) else ContT ($())
in print n >> runContT iff (\_ -> return()))
在这一点上,我不知道如何处理递归定义f
完成这种减少的最佳方法是什么?
我现在离开定义'f',并开始展开'runContT'。只有在必须时才展开'f'。顺便说一下,我发现'(k,n)<-...'中的名字'k'很混乱,因为它看起来好像和'\ k - > ...一样',但是这些甚至没有相同的类型(一个是整数,另一个是一对)。 – chi
@chi这是一个来自[这里](https://www.schoolofhaskell.com/user/jwiegley/understanding-continuations)的稍微改变的例子,但是其中的一个至少可以称为'k'' – Ryba