(loop (cons (read-char) r) nc)
ncが更新されてないよ。
peek-charを使わずに書き直した方が良いのでは。