3

Scheme では、a から取得した継続を実行するcall/ccと、その最初の呼び出し/cc に効果的にジャンプして戻り、保存された呼び出しスタックが復元されます。

Haskell の学習を始めたばかりで、理解する方法を理解しようとしていますcallCC。それはcallCC、Scheme の理解という観点から理解しようとすることcall/ccです。の実装callCC

callCC f = cont $ \h -> runCont (f (\a -> cont $ \_ -> h a)) h

私が知る限り、保存または復元されたコール スタックに関しては何も言及されていません。SchemecallCCcall/cc.

編集:誰かが以下をHaskellに翻訳できれば、理解に役立つでしょう。

(define (f return)
  (return 2)
  3)

(display (f (lambda (x) x))) ; displays 3

(display (call-with-current-continuation f)) ; displays 2
4

2 に答える 2