J'ai du mal à comprendre le comportement du programme du schéma suivant:Aide-dynamique du vent et appel/cc
(define c
(dynamic-wind
(lambda() (display 'IN)(newline))
(lambda() (call/cc (lambda (k)
(display 'X)(newline)
k)))
(lambda() (display 'OUT)(newline))))
Si je comprends bien, c sera lié au continution créé juste avant « (affiche 'X) ".
Mais utiliser c semble se modifier! La définition des impressions ci-dessus (comme je m'y attendais) IN, X et OUT:
IN
X
OUT
Et il est une procédure:
#;2> c
#<procedure (a9869 . results1678)>
Maintenant, je pense que quand il est appelé à nouveau, X serait imprimé, et ce n'est pas!
#;3> (c)
IN
OUT
Et maintenant c n'est plus une procédure, et une deuxième invocation de c ne fonctionnera pas!
#;4> c ;; the REPL doesn't answer this, so there are no values returned
#;5> (c)
Error: call of non-procedure: #<unspecified>
Call history:
<syntax> (c)
<eval> (c) <--
Je me attendais à ce que chaque invokation à (c) ferait la même chose - imprimer IN, X et OUT. Qu'est-ce que je rate?
Oh, je vois! Maintenant, j'ai l'impression que c'était une question vraiment idiote après tout. Merci beaucoup! – josh
@Eli: "vous ne pouvez donc pas l'appeler une troisième fois" - sauf si vous appelez toujours (cc), qui lie c à la suite d'une procédure définissant c ... :-) – Jay
@Jay: vous a raison, bien sûr. Je me concentrais sur la configuration de josh, sauf que Racket nécessite une certaine valeur à envoyer - donc l'utilisation de 'c' l'aurait rendu plus confus. –