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

  1. ;"values.scm" multiple values
  2. ;By david carlton, carlton@husc.harvard.edu.
  3. ;
  4. ;This code is in the public domain.
  5.  
  6. (require 'record)
  7.  
  8. (define values:*values-rtd*
  9.   (make-record-type "values"
  10.             '(values)))
  11.  
  12. (define values
  13.   (let ((make-values (record-constructor values:*values-rtd*)))
  14.     (lambda x
  15.       (if (and (not (null? x))
  16.            (null? (cdr x)))
  17.       (car x)
  18.       (make-values x)))))
  19.  
  20. (define call-with-values
  21.   (let ((access-values (record-accessor values:*values-rtd* 'values))
  22.     (values-predicate? (record-predicate values:*values-rtd*)))
  23.     (lambda (producer consumer)
  24.       (let ((result (producer)))
  25.     (if (values-predicate? result)
  26.         (apply consumer (access-values result))
  27.         (consumer result))))))
  28.