I believe this shows a bug in letrec: guile> (let ((x 1)) (let ((x 32) (y x)) y)) 1 guile> (let ((x 1)) (letrec ((x 32) (y x)) y))
Backtrace: In standard input: 2: 0* (let* ((x 1)) (letrec ((x 32) (y x)) y)) 2: 1 (letrec ((x 32) (y x)) y) standard input:2:14: In expression (letrec (# #) y): standard input:2:14: Variable used before given a value: x ABORT: (unbound-variable)