Realidades Paralelas

Tuesday, September 14, 2004

Enfim

Sobre a tail recursion no interpretador Scheme, a resposta é simples e engenhosa; está nas entrelinhas do interpretador. É só não salvar o estado na hora de avaliar (executar) uma combinação.

Mas não tem que voltar ? Nem sempre, só se a combinação for uma subcombinação de outra combinação. E aí o interpretador salva: antes de avaliar cada argumento de uma combinação, ele salva o estado, para restaurar quando a avaliação do argumento tiver sido terminada.

Ou seja, o controle de uma função para outra é simplesmente transferido (goto mesmo). Lembrando do artigo de Reynolds, isso é o interessante do estilo de passagem de continuações: uma função no CPS nunca retorna, apenas transferindo o controle para a próxima continuação.

Dá para ver que isso é possível em uma linguagem orientada a expressões como Scheme, sem sequenciamento de instruções e outras características imperativas. É preciso refletir como seria possível fazer isso em C, por exemplo (sim, eu sei que já foi feito).

Agora posso terminar o LtU Imperative.

0 Comments:

Post a Comment

<< Home