相关疑难解决方法(0)

阴阳拼图是如何运作的?

我正在尝试在Scheme中掌握call/cc的语义,并且关于continuation的Wikipedia页面以阴阳拼图为例:

(let* ((yin
         ((lambda (cc) (display #\@) cc) (call-with-current-continuation (lambda (c) c))))
       (yang
         ((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))) )
    (yin yang))
Run Code Online (Sandbox Code Playgroud)

它应该输出@*@**@***@****@...,但我不明白为什么; 我希望它输出@*@*********......

有人可以详细解释为什么阴阳拼图的工作方式有效吗?

scheme callcc

34
推荐指数
4
解决办法
5044
查看次数

Haskell版阴阳拼图:种类不兼容错误

我想在Haskell中实现阴阳拼图.这是我的尝试(不成功):

-- The data type in use is recursive, so we must have a newtype defined
newtype Cl m = Cl { goOn :: MonadCont m => Cl m -> m (Cl m) }

yinyang :: (MonadIO m, MonadCont m) => m (Cl m)
yinyang = do
    yin <-  (callCC $ \k -> return (Cl k)) >>= (\c -> liftIO (putStr "@") >> goOn c)
    yang <- (callCC $ \k -> return (Cl k)) >>= (\c -> liftIO …
Run Code Online (Sandbox Code Playgroud)

haskell data-kinds

9
推荐指数
1
解决办法
302
查看次数

标签 统计

callcc ×1

data-kinds ×1

haskell ×1

scheme ×1