Как интерпретировать callCC в Haskell?
На схеме выполнение продолжения, полученного изcall/cc
эффективно возвращается к этому начальному вызову / cc и восстанавливает сохраненный стек вызовов.
Я только начал изучать Haskell, и я пытаюсь понять, как понятьcallCC
, То есть попытаться понятьcallCC
с точки зрения понимания схемыcall/cc
, РеализацияcallCC
является
callCC f = cont $ \h -> runCont (f (\a -> cont $ \_ -> h a)) h
Насколько я могу судить, ничего не упоминается о сохраненных или восстановленных стеках вызовов. Как можно интерпретироватьcallCC
в Haskell исходя из знакомства с Scheme'scall/cc
.
Редактировать: Может быть, если бы кто-то мог перевести следующее на Haskell, это помогло бы мне понять.
(define (f return)
(return 2)
3)
(display (f (lambda (x) x))) ; displays 3
(display (call-with-current-continuation f)) ; displays 2