mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-11 00:00:49 +02:00
27 lines
719 B
Scheme
27 lines
719 B
Scheme
;"values.scm" multiple values
|
|
;By david carlton, carlton@husc.harvard.edu.
|
|
;
|
|
;This code is in the public domain.
|
|
|
|
(require 'record)
|
|
|
|
(define values:*values-rtd*
|
|
(make-record-type "values"
|
|
'(values)))
|
|
|
|
(define values
|
|
(let ((make-values (record-constructor values:*values-rtd*)))
|
|
(lambda x
|
|
(if (and (not (null? x))
|
|
(null? (cdr x)))
|
|
(car x)
|
|
(make-values x)))))
|
|
|
|
(define call-with-values
|
|
(let ((access-values (record-accessor values:*values-rtd* 'values))
|
|
(values-predicate? (record-predicate values:*values-rtd*)))
|
|
(lambda (producer consumer)
|
|
(let ((result (producer)))
|
|
(if (values-predicate? result)
|
|
(apply consumer (access-values result))
|
|
(consumer result))))))
|