From d819885048e933075a621fb0a3f647b9cd222d59 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 12 Feb 2016 23:20:38 -0500 Subject: [PATCH] define-values stub --- macro-testing.scm | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) 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