call-with-values / values

call-with-values / values の実装。
R5RSによれば values は以下のように call/cc を用いて定義できるらしい。

(define values (lambda things
                 (call-with-current-continuation
                  (lambda (cont) (apply cont things)))))


call/cc をうまいこと拡張しつつ call-with-values を実装した。

mona> 
(call-with-values (lambda () (values 4 5))
(lambda (a b) b))
5
mona> (call-with-values * -)
-1

うん。動いている。