Como o quebra-cabeça yin-yang funciona?
Estou tentando entender a semântica da chamada / cc no esquema, e a página da Wikipedia em continuações mostra o quebra-cabeça yin-yang como um exemplo:
(let* ((yin
((lambda (cc) (display #\@) cc) (call-with-current-continuation (lambda (c) c))))
(yang
((lambda (cc) (display #\*) cc) (call-with-current-continuation (lambda (c) c)))) )
(yin yang))
Deve produzir@*@**@***@****@...
, mas não entendo o porquê; Eu esperaria que ele produzisse@*@*********
...
Alguém pode explicar em detalhes por que o quebra-cabeça yin-yang funciona da maneira que funciona?