Pode alguém por favor explicar essa continuação no esquema?
-
22-07-2019 - |
Pergunta
Estou aprendendo continuações, mas não posso envolver minha cabeça em torno deste código. Por que ele entrar em loop infinito?
(let ((cont #f))
(call/cc (lambda (k)
(set! cont k)))
(cont #f))
Solução
Linha por linha:
- definimos
cont
variável local - chamamos com a continuação atual alguma função lambda, ou seja, estamos passando a continuação atual para a função lambda como um argumento. continuação atual é uma função de um argumento, esse argumento é então usado como um "valor de retorno" de
call/cc
(e aqui é eventualmente ignorado). - Assim
k
aqui significa tudo, que vai acontecer depois, no nosso caso algo próximo no sentido(lambda (call/cc-retval) (let () call/cc-retval (cont #f)))
. Nós definir o valorcont
para essa continuação.call/cc
retornos. - Uma vez que
cont
agora é uma função que representou a continuação, e do argumento é o "valor de retorno de chamada / cc", que acabamos de chamar essa função, o argumento é ignorado, e precisamos chamar o(cont #f)
novamente.
Assim, o que temos, eventualmente, é o loop infinito.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow