define-values stub

This commit is contained in:
Justin Ethier 2016-02-12 23:20:38 -05:00
parent 861bc8a7ca
commit d819885048

View file

@ -66,6 +66,44 @@
(lambda args (let ((len (length args))) (%case args len 0 () . clauses))))))
;(lambda args (let ((len (length* args))) (%case args len 0 () . clauses))))))
;(define-syntax define-values
; (syntax-rules ()
; ((define-values () expr)
; (define dummy
; (call-with-values (lambda () expr)
; (lambda args #f))))
; ((define-values (var) expr)
; (define var expr))
; ((define-values (var0 var1 ... varn) expr)
; (begin
; (define var0
; (call-with-values (lambda () expr) list))
; (define var1
; (let ((v (cadr var0)))
; (set-cdr! var0 (cddr var0))
; v))
; ...
; (define varn
; (let ((v (cadr var0)))
; (set! var0 (car var0))
; v))))
; ((define-values (var0 var1 ... . var-dot) expr)
; (begin
; (define var0
; (call-with-values (lambda () expr) list))
; (define var1
; (let ((v (cadr var0)))
; (set-cdr! var0 (cddr var0))
; v))
; ...
; (define var-dot
; (let ((v (cdr var0)))
; (set! var0 (car var0))
; v))))
; ((define-values var expr)
; (define var
; (call-with-values (lambda () expr) list)))))
(write
(letrec* ((x 1)) x))
@ -92,3 +130,11 @@
(write
(range 3 5)) ; => (3 4)
;(define-values (x y) (integer-sqrt 17))
;(write
; (list x y)) ; => (4 1)
;
;(write
; (let ()
; (define-values (x y) (values 1 2))
; (+ x y))) ;=> 3