Scheme では、a から取得した継続を実行するcall/cc
と、その最初の呼び出し/cc に効果的にジャンプして戻り、保存された呼び出しスタックが復元されます。
Haskell の学習を始めたばかりで、理解する方法を理解しようとしていますcallCC
。それはcallCC
、Scheme の理解という観点から理解しようとすることcall/cc
です。の実装callCC
は
callCC f = cont $ \h -> runCont (f (\a -> cont $ \_ -> h a)) h
私が知る限り、保存または復元されたコール スタックに関しては何も言及されていません。SchemecallCC
のcall/cc
.
編集:誰かが以下をHaskellに翻訳できれば、理解に役立つでしょう。
(define (f return)
(return 2)
3)
(display (f (lambda (x) x))) ; displays 3
(display (call-with-current-continuation f)) ; displays 2