次のSchemeプログラムの動作を理解するのに苦労しています:
(define c
(dynamic-wind
(lambda () (display 'IN)(newline))
(lambda () (call/cc (lambda (k)
(display 'X)(newline)
k)))
(lambda () (display 'OUT)(newline))))
私が理解しているように、 c は "(display 'X)" の直前に作成された継続にバインドされます。
しかし、c を使用すると、それ自体が変更されるようです。上記の定義により、(予想どおり) IN、X、および OUT が出力されます。
IN
X
OUT
そして、それは手順です:
#;2> c
#<procedure (a9869 . results1678)>
今、私はそれが再び呼び出されたときに X が出力されることを期待していますが、そうではありません!
#;3> (c)
IN
OUT
そして、c はもはや手続きではなく、c の 2 回目の呼び出しは機能しません!
#;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) <--
(c) を呼び出すたびに、IN、X、および OUT を出力するという同じことが行われると予想していました。私は何が欠けていますか?