test/dynwind.scm (2)
なんだこれは。こんな試験がある。
;; continuation with multiple values (test* "call/cc (values)" '(1 2 3) (receive x (call-with-current-continuation (lambda (c) (c 1 2 3))) x))
ええと、receive の構文は
(receive <名前のリスト> <多値を返す式> <本体>)
とある。上記の例だと x で多値をまとめて受けとってそれを戻す形になるはず。で、多値を戻す手続きが
(call-with-current-continuation (lambda (c) (c 1 2 3)))
になる模様。ちなみに上記を gosh で評価したら以下
gosh> (call/cc (lambda (c) (c 1 2 3))) 1 2 3 gosh>
なんで上記の式が多値を戻すのか、が分からんな。c にセットされるのは values なんでしょうか。
gosh> (call/cc (lambda (c0) (set! c c0) (c 1 2 3))) 1 2 3 gosh> c #<subr continuation> gosh> (c) #<undef> gosh> (c 1 2) 1 2 gosh> (values 1 2) 1 2 gosh>
うーん。ビンゴで良いのかどうなのか。disasm してみましたが分かる訳もなし。