File: values.scm

package info (click to toggle)
scheme48 1.8%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 14,980 kB
  • ctags: 14,127
  • sloc: lisp: 76,272; ansic: 71,514; sh: 3,026; makefile: 637
file content (19 lines) | stat: -rw-r--r-- 514 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
; Copyright (c) 1993-2008 by 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))))