--- a/handouts/ho09.tex Sat Sep 09 14:14:31 2023 +0100
+++ b/handouts/ho09.tex Sun Sep 10 12:24:55 2023 +0100
@@ -785,6 +785,44 @@
\end{figure}
+\section*{Alternatives to CPS}
+
+While I appreciate that this handout is already pretty long, this
+section is for students who think the CPS-translation is too much of
+voodoo programming---there is a perhaps simpler alternative. This
+alternative is along the lines: if you cannot bridge the gap in
+a single step, do it in two simpler steps. Let's look at the
+simple expression $1 + (2 + 3)$. The CPS-translation correctly
+generates the expression
+
+\begin{lstlisting}[language=LLVMIR,numbers=left,escapeinside={(*@}{@*)}]
+let tmp0 = add 2 3 in
+let tmp1 = add 1 tmp0 in
+ return tmp1
+\end{lstlisting}
+
+\noindent
+where $(2 + 3)$ is pulled out and calculated first. The problem is that it
+requires a bit of magic. But with the ability to give a separate variable
+to each indivifual computation, we could do the following: The expression
+$1 + (2 + 3)$ is a tree like this
+
+\begin{center}
+\begin{tikzpicture}[line width=1mm]
+ \node {root} [grow'=up]
+ child {node {1}}
+ child {node[circle,draw] {+}
+ child {node {2}}
+ child {node {3}}
+ };
+\end{tikzpicture}
+\end{center}
+
+\noindent
+and we could perform a completely standard recursive traversal of the
+tree: each inner node gets a new variable and assignment.
+
+
\noindent
\end{document}