<cl> (scheme-macro-expand '(letrec ((mycar (lambda (x) (car x)))) (mycar a))) ((LAMBDA (MYCAR) (SET! MYCAR (LAMBDA (X) (CAR X))) (MYCAR A)) NIL) <cl> (scheme-macro-expand '(let ((mycar (lambda (x) (car x)))) (mycar a))) ((LAMBDA (MYCAR) (MYCAR A)) (LAMBDA (X) (CAR X))) <cl> (scheme-macro-expand '(let* ((mycar (lambda (x) (car x)))) (mycar a))) ((LAMBDA (MYCAR) (LET* () (MYCAR A))) (LAMBDA (X) (CAR X))) <cl> (scheme) => (define (test a) (letrec ((mycar (lambda (x) (car x)))) (mycar a))) TEST => test #S(FN :CODE #((ARGS 1) (GVAR NIL) (FN #S(FN :CODE #((ARGS 1) (FN #S(FN :CODE #((ARGS 1) (LVAR 0 0 ";" X) (GVAR CAR) (CALL 1) (RETURN)) :ENV ((MYCAR) (A) NIL) :NAME NIL :ARGS (X))) (LSET 0 0 ";" MYCAR) (POP) (LVAR 1 0 ";" A) (LVAR 0 0 ";" MYCAR) (CALL 1) (RETURN)) :ENV ((A) NIL) :NAME NIL :ARGS (MYCAR))) (CALL 1) (RETURN)) :ENV (#()) :NAME TEST :ARGS NIL) => (test '(a)) A