shiro さんに頂いたソースコードを私なりにコメント
;; まず、c には hop を実行する前の継続が入ります。 (define c (begin (print "hip") (let ((x (call/cc (lambda (y) y)))) (print "hop") x))) hip hop c gosh> c ;; よしよし、ちゃんと入っているようだ。 #<subr continuation> gosh> (c "Jump!!!") ;; c を実行すると、残りが実行されるのだけど、 hop c gosh> c ;; あれ! c が再定義されている?! "Jump!!!"
sumim さんのコメントを参考に Squeak に翻訳してみます。未来をあとで実行するでは無くて、未来を二度実行する方法です。
"x はワークスペース変数なので宣言しない" Transcript show: 'hip,'. x := thisContext copyStack. Transcript show: 'hop,'. "ここで一旦休んで以下を実行" x jump.
jump はコピーしたコンテキストを実行するだけなので、scheme のような凝った事は出来ませんが、一応 hop が二度表示されます。惜しい!