fixing let* internal define

This commit is contained in:
Derick Eddington 2009-12-07 16:16:01 -08:00
parent 14c99c4729
commit 7050da677d
2 changed files with 11 additions and 2 deletions

View file

@ -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)

View file

@ -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)))