MIT Scheme detects the bound but not assigned error only in interpreted code currently. I don't think that (let ((var)) ...) or the equivalent DO form have to be in the standard. Both MIT Scheme and T (and whoever else wants it) can implement them as a compatible extension.