kleine foutjes in faculteit
[sec1415.git] / an_faculteit.tex
index eab5607..ae9178f 100644 (file)
@@ -14,35 +14,74 @@ do (
 
 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
+push 5      // x:=5
+push 1      // y:=1
 
 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
+            // Un(2)
+            // $\neg$(x=1) $\equiv$ \neg(x-1)>0)
+
+
+            // x-1
+            // Un(2)
+push 2      //
+push 1      //
+roll        //
+dup         //
+push 3      //
+push 1      //
+roll        //
+push 1      //
+sub         //
+not         // $\neg(x-1)$
+
+push 1      // zet $0$ op de stack
+push 1
+sub
+
+gre         // $\neg(x-1)>0$ oftewel x=1
+
+pointer     // als x=0 dan draait de DP niet en gaat het programma naar pad B
+            // als x$\neq$ dan draait de DP en gaat het programma naar pad A
 
 PAD A:
-skip        //een oneindig aantal witte blokken, y is nu x!
+skip        // een oneindig aantal witte blokken, y is nu x!
+            // evt een outchar om $y$ naar standardout te printen
 
 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
+            // y:=y*x
+            // Bin(1, 2)
+dup         // Un(1)
+push 3      // Un(2+1)
+push 2      //
+roll        //
+dup         //
+push 4      //
+push 1      //
+roll        //
+mul         // x*y
+push 3      // Ass(2)
+push 2
+roll
+pop
+push 2
+push 1
+roll
+            // x:=x-1
+push 2      // Un(2)
+push 1
+roll
+dup
+push 3
+push 1
+roll
 
+
+push 1      // 
+sub         // x-1
+push 3      // Ass(2)
+push 1
+roll
+pop         
+            // nu gaat het programma weer via een wit pad naar markering A
 \end{lstlisting}