20 lines
513 B
Scheme
20 lines
513 B
Scheme
|
; Copyright (c) 1993, 1994 Richard Kelsey and Jonathan Rees. See file COPYING.
|
||
|
|
||
|
|
||
|
; Multiple return values
|
||
|
|
||
|
(define multiple-value-token (vector 'multiple-value-token))
|
||
|
|
||
|
(define (values . things)
|
||
|
(if (and (pair? things)
|
||
|
(null? (cdr things)))
|
||
|
(car things)
|
||
|
(cons multiple-value-token things)))
|
||
|
|
||
|
(define (call-with-values producer consumer)
|
||
|
(let ((things (producer)))
|
||
|
(if (and (pair? things)
|
||
|
(eq? (car things) multiple-value-token))
|
||
|
(apply consumer (cdr things))
|
||
|
(consumer things))))
|