\subsection{Faculteit}
Als we de analyse op een compleet programma toepassen komt er een \textit{Piet}
programma uit dat behoorlijk fors is maar netjes zijn werk doet. Dit programma
berekent de faculteit van $x$ en stopt dat uiteindelijk in $y$.
\begin{lstlisting}[title=Faculteit in \textit{While}]
x:=5;
y:=1;
while $\neg$(x=1)
do (
    y:=y*x;
    x:=x-1
)
\end{lstlisting}

In \textit{Piet} ziet dit er als volgt uit...
\begin{lstlisting}[title=Faculteit in \textit{Piet'}]
push 5      // x is vanaf nu variabele 1
push 1      // y is vanaf nu variabele 2

MARKERING A:
Un(1)       // variabele x wordt klaargezet
push 1      // de waarde 1 wordt klaargezet
sub         // subtractie om straks gelijkheid te kunnen bepalen
push 1      // de waarde 1 word gepushed om 0 te maken
dup         // de waarde 1 staat er nu twee keer op
sub         // 0 staat op de stack om groterdan relatie te bepalen
push 2      // klaarmaken om de bovenste twee te swappen
push 1      // idem
roll        // swappen
gre         // als x>0 dan ligt 1 op de stack anders 0
not         // als x=0 dan ligt 1 op de stack anders 0
pointer     // als x=0 dan draait de DP niet en gaat het programma naar pad A
            // als x$\neq$ dan draait de DP en gaat het programma naar pad B

PAD A:
skip        //een oneindig aantal witte blokken, y is nu x!

PAD B:
Bin(1, 2)   // x en y worden klaargezet om y opnieuw te assignen
mul         // x*y ligt boven op de stack
Ass(2)      // x*y wordt geassigned aan y
Un(1)       // x wordt klaargezet
push 1      // 1 wordt klaargezet
sub         // x-1 ligt op de stack
Ass(1)      // x-1 wordt geassigned aan x
            // nu gaat het programma weer via een wit pad naar markering A

\end{lstlisting}
