great to see someone teaching how to properly implement tail calls!
I use a similar approach in my C interpreter https://github.com/rain-1/scheme_interpreter/blob/master/src/sch3.c#L902 where recursion is done with a goto instead of a C recursive call (which would be non tail recursive).
Annoyingly, the redirects to GitHub are broken. Source code can be found here. I’ve emailed Peter Norvig (!) to let him know.