Schemeで多値を受け取る継続を補足できないか(できなかった)

Schemeは今R6RSがスタンダードだそうですが、私はR5RSでさえ追いつけていません。
そんな渡しですが、Schemerのマジックワード、多値と継続について時々妄想していまうのです。

多値・・・

関数が複数個の引数をとることができるんだから、関数の返り値が1個だけなんて、美しくないよね!
ってな感じでSchemeに導入された「多値」。
そのコアになるプリミティブは次の通り。

(values v1 ... vn)

で、n個の値を返すと。

(call-with-values 
  (lambda () ... (values v1 ... vn))
  (lambda (a1 ... an) body))

で、 (lambda () ... (values v1 ... vn))の返り値 v1 ... vn が a1 ... an に束縛されて body が評価されると。
実際にはこれらの糖衣構文でプログラムするんだそうな。

call-with-values の中の継続

ここで、(lambda () ... (values v1 ... vn))からの返り値が(lambda (a1 ... an) body)にわたる過程を見れば、
call-with-values の中にある (lambda () ... (values v1 ... vn)) の計算結果を受け取る「継続」が、
多値を受け取る継続だろうなという推測ができるわけです。
すなわち、この継続は、

(lambda () ... (values v1 ... vn))の計算結果である値を複数受け取り、
「受け取った複数の値・多値を、引数に組み替え」て、(lambda (a1 ... an) body)に渡す

というものであったりします。
継続って通常値を1個受け取るものでありますが、call-with-values内においては、複数の値を受け取る継続が一瞬現れるように見えます。

じゃ複数の値を受け取る継続の補足ができるかな?

ということで少し考えてみることにします。

(define k '()) -> unspecified
(call-with-values
  (call/cc (lambda (c) (set! k c) (lambda () (values 1 2))))
  (lambda (a b) (list a b)))
->(1 2)
(k (values 3 4))
->?????

kに多値を受け取る継続を捕捉させたいんだけど、このコードで捕捉される継続は、thunkを受け取る継続なんだよなぁ。
うまく多値を受け取る継続を補足できないかなぁ。
っていうか、捕捉できないように吟味して call-with-values とか考えたのかな。
わからん。

オチなし

なんじゃこりゃ。今日は何だかしっちゃかめっちゃかだな、