diff --git a/lib/init.scm b/lib/init.scm index b7f40fe0..d5191caf 100644 --- a/lib/init.scm +++ b/lib/init.scm @@ -219,13 +219,17 @@ (if (every (lambda (x) (if (pair? x) (if (pair? (cdr x)) (null? (cddr x)) #f) #f)) bindings) - (if (identifier? (cadr expr)) - `(,(rename 'letrec) ((,(cadr expr) - (,(rename 'lambda) ,(map car bindings) - ,@(cdddr expr)))) - ,(cons (cadr expr) (map cadr bindings))) - `((,(rename 'lambda) ,(map car bindings) ,@(cddr expr)) - ,@(map cadr bindings))) + ((lambda (vars vals) + (if (identifier? (cadr expr)) + `((,(rename 'lambda) ,vars + (,(rename 'letrec) ((,(cadr expr) + (,(rename 'lambda) ,vars + ,@(cdddr expr)))) + (,(cadr expr) ,@vars))) + ,@vals) + `((,(rename 'lambda) ,vars ,@(cddr expr)) ,@vals))) + (map car bindings) + (map cadr bindings)) (error "bad let syntax" expr))) (if (identifier? (cadr expr)) (caddr expr) (cadr expr))))))