diff --git a/macro-testing.scm b/macro-testing.scm index c7a6785f..70896e4a 100644 --- a/macro-testing.scm +++ b/macro-testing.scm @@ -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