diff --git a/init.scm b/init.scm index 0a93458b..f748b98e 100644 --- a/init.scm +++ b/init.scm @@ -214,7 +214,7 @@ `(,(rename 'letrec) ((,(cadr expr) (,(rename 'lambda) ,(map car bindings) ,@(cdddr expr)))) - ,(cons (cadr expr) (map cadr (caddr expr)))) + ,(cons (cadr expr) (map cadr bindings))) `((,(rename 'lambda) ,(map car bindings) ,@(cddr expr)) ,@(map cadr bindings))) (error "bad let syntax" expr))) @@ -226,7 +226,7 @@ (if (null? (cdr expr)) (error "empty let*" expr)) (if (null? (cddr expr)) (error "no let* body" expr)) (if (null? (cadr expr)) - `(,(rename 'begin) ,@(cddr expr)) + `(,(rename 'let) () ,@(cddr expr)) (if (if (list? (cadr expr)) (every (lambda (x) diff --git a/tests/r5rs-tests.scm b/tests/r5rs-tests.scm index e6017417..9c379eb2 100644 --- a/tests/r5rs-tests.scm +++ b/tests/r5rs-tests.scm @@ -77,6 +77,15 @@ (test 70 (let ((x 2) (y 3)) (let* ((x 7) (z (+ x y))) (* z x)))) +(test -2 (let () + (define x 2) + (define f (lambda () (- x))) + (f))) + +(define let*-def 1) +(let* () (define let*-def 2) #f) +(test 1 let*-def) + (test '#(0 1 2 3 4) (do ((vec (make-vector 5)) (i 0 (+ i 1)))