[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: multiple return values
If "wrong" doesn't imply "signals an error" then the following is a
correct implementation of alternative 1. This is pretty much how the
feature was implemented in T2.
(define values-marker (list 'values-marker))
(define receive-values
(lambda (thunk proc)
(let ((vals (thunk)))
(if (and (pair? vals) (eq? (car vals) values-marker))
(apply proc (cdr vals))
(proc vals)))))
(define return-values
(lambda vals
(cons values-marker vals)))
Not quite a correct implementation, I think. RETURN-VALUES should
canonicalize single return values:
(define return-values
(lambda vals
(if (and (pair? vals) (null? (cdr vals)))
(car vals)
(cons values-marker vals))))
-Norman
-------