We have seen that many times the complexity of a function is reduced by using more than one procedure. More importantly, often, we cannot code an efficient implementation without an auxiliary procedure. The problem is that the auxiliary procedures can cause confusion in the code because they can potentially introduce name conflicts, scope conflicts, and other problems when they're defined at the global level.
Local bindings provide a solution.
You might think we could just use the let syntax we learned in the last lecture. Questions Before going on, use the semantic equivalences of let and lambda that we discussed in the last lecture to determine why this doesn't work. Scheme has a special syntax for recursive local bindings. The procedure is called letrec . We'll see how this accomplished later.