do syntax change: elimiante variable 'loop'
internal define -> letrec
internal define