home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 44
/
Amiga_Dream_44.iso
/
RiscPc
/
programmation
/
scm4e2.arc
/
!Scm
/
slib
/
values
< prev
next >
Wrap
Text File
|
1994-06-05
|
719b
|
28 lines
;"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))))))