nieuw
authorMart Lubbers <mart@martlubbers.net>
Wed, 28 May 2014 09:49:32 +0000 (11:49 +0200)
committerMart Lubbers <mart@martlubbers.net>
Wed, 28 May 2014 09:49:32 +0000 (11:49 +0200)
img/img4.gif [new file with mode: 0644]
img/img4.png [new file with mode: 0644]
introduction.tex

diff --git a/img/img4.gif b/img/img4.gif
new file mode 100644 (file)
index 0000000..1814500
Binary files /dev/null and b/img/img4.gif differ
diff --git a/img/img4.png b/img/img4.png
new file mode 100644 (file)
index 0000000..97036ea
Binary files /dev/null and b/img/img4.png differ
index a6c5686..756f464 100644 (file)
@@ -4,60 +4,101 @@ programmeertaal die is ge\"inspireerd door de Nederlandse kunstenaar Piet
 Mondriaan.  Programma's geschreven vooor \textit{piet} kunnen eruit zien als
 abstracte kunst en worden aangeleverd als een afbeelding.  Een programma dat
 zijn doel nastreeft is bijvoorbeeld het volgende programma dat het woord
-``\textit{Tetris}'' print en iedere groep blokken een blok is uit het originele
-\textit{Tetris} spel.
+``\textit{Tetris}'' print en ieder vlak van dezelfde kleur is van de vorm van
+een van de blokken uit het originele \textit{Tetris} spel.
 \begin{figure}[h]
-       \includegraphics[natheight=200px, natwidth=160px, height=50px, width=40px]{img1.png}
+    \includegraphics[natheight=200px, natwidth=160px, height=50px, width=40px]{img1.png}
 \end{figure}
 
 \subsection{Beschrijving en vergelijking met \textit{While}}
 \textit{Piet} en \textit{While} zijn beide imperatieve talen maar zijn toch erg
-verschillend als het gaat om variabelenopslag en instructies. \textit{Piet}
+verschillend als het gaat om variabelenopslag en instructies.  \textit{Piet}
 slaat zijn variabelen op in een stack waar \textit{While} dit niet doet. In een
 toestand in \textit{While} kan iedere gedeclareerde variabele opgevraagd
 worden. Omdat \textit{Piet} de variabelen in een stack opslaat kan er alleen
-maar de bovenste waarde opgevraagd worden.\\
-In \textit{Piet} is een stack een geordende rij van gehele getallen. De stack
-gedraagt zich volgens het LIFO(Last in First Out) principe wat inhoudt dat er
-slechts \'e\'en element per keer kan worden opgevraagd en dat dat alleen het
-laatst toegevoegde element kan zijn.\\
+maar de bovenste waarde opgevraagd worden.\\ In \textit{Piet} is een stack een
+geordende rij van gehele getallen. De stack gedraagt zich volgens het LIFO(Last
+in First Out) principe wat inhoudt dat er alleen het bovenste element
+beschikbaar is.\\
 Instructies worden gegeven door het binnengaan van een nieuwe codel
 \footnote{Een codel is een blok $n\times n$ pixels waarbij $n\in\mathbb{N}$,
 een argument aan de compiler bepaalt de waarde van $n$. De standaard waarde is
-$1$} Als de kleur van de nieuwe codel wit of hetzelfde is als de codel die
-verlaten wordt zal er niks gebeuren, is de codel zwart dan wordt er een nieuwe
-richting gekozen door de interpreter. Alle andere kleuren beschrijven een
-overgang die te beschrijven is in twee parameters; tint en intensiteit. Beide
-parameters zijn cyclisch, wat betekent dat de opvolger van de grootste waarde
-de kleinste waarde is. Iedere mogelijke overgang beschrijft een instructie voor
-de interpreter. Deze overgangen zijn beschreven in tabel
-\ref{tab:in1}.
+$1$}, de grootte van de codel is een interpreter argument en kan een groot
+verschil maken in semantiek van het programma. Bij wijze van uitdaging heeft
+een \textit{Piet} programmeur een programma gemaakt dat bij codel grootte $2$
+``Piet'' print en bij codel grootte $1$ ``Hello World''. Het programma is
+zichtbaar in \ref{fig:img4}.
+\begin{figure}[H]
+    \caption{Codel grootte maakt het verschil}
+    \label{fig:img4}
+    \centering
+    \includegraphics[natheight=46px, natwidth=50px, height=46px, width=50px]{img4.png}
+\end{figure}
+Een \textit{Piet} programma wordt ge\"interpreteert door een interpreter die te
+vergelijken is met een agent die over de pixels loopt. De agent houdt een
+aantal dingen bij terwijl hij aan het lopen is over de pixels namelijk:
+\textit{codelchooser(CC), direction pointer(DP), vorig vlak(VK)}.  De VK waarde
+is de waarde van het vorige codel bij het bewegen naar een nieuwe codel. De
+waarde van een codel is het oppervlakte van de codels met de zelfde kleur die
+verlaten is.  Het bepalen van de volgende codel wordt bepaald door een
+combinatie van de CC en de DP, deze relatie staat beschreven in \ref{tab:in1}.
+\begin{table}[H]
+    \caption{Volgend codel keuze}
+    \label{tab:in1}
+    \centering
+    \begin{tabular}{|c|c|c|}
+        \hline
+        DP & CC & Codel chosen\\
+        \hline
+        rechts & links & meest bovenste\\
+        rechts & rechts & minst bovenste\\
+        omlaag & links & meest rechtse\\
+        omlaag & rechts & meest linkse\\
+        links & links & meest onderste\\
+        links & rechts & meest bovenste\\
+        omhoog & links & meest linkse\\
+        omhoog & rechts & meest rechtse\\
+        \hline
+    \end{tabular}
+\end{table}
+
+De overgang van kleur die wordt waargenomen bij het verplaatsen van codel naar
+codel bepaalt de operatie die wordt uitgevoerd. De overgang in kleur is te
+beschrijven in twee cyclische parameters genaamd tint en intensiteit. Deze
+overgangen zijn beschreven in \ref{tab:in2}. Als de interpreter een witte codel
+binnengaat wordt er niks gedaan en vervolgt de interpreter zijn weg. Zwarte
+codels en de rand van de afbeelding zijn blokkades en zorgt voor een CC
+waardeverwisseling, komt de interpreter weer een blokkade tegen wordt de DP een
+slag met de klok mee gedraaid, dit wordt herhaalt tot er een niet blokkade blok
+gevonden wordt. Als dit na acht pogingen nog niet het geval is termineert het
+programma.
+\ref{tab:in2}.
 
 \begin{table}[H]
-       \caption{Beide overgangcykels}
-       \label{tab:in1}
-       \centering
-               \begin{itemize}
-                       \item{Tint:} rood$\rightarrow$ geel$\rightarrow$ cyaan$\rightarrow$ blauw$\rightarrow$ magenta
-                       \item{Intensiteit:} licht$\rightarrow$ normaal$\rightarrow$ donker
-               \end{itemize}
+    \caption{Beide overgangcykels}
+    \label{tab:in2}
+    \centering
+        \begin{itemize}
+            \item{Tint:} rood$\rightarrow$ geel$\rightarrow$ cyaan$\rightarrow$ blauw$\rightarrow$ magenta
+            \item{Intensiteit:} licht$\rightarrow$ normaal$\rightarrow$ donker
+        \end{itemize}
 \end{table}
 
 De instructies die de overgangen uitdrukken staan beschreven in de tabel
 \ref{tab:in2}.
 \begin{table}[H]
-       \caption{Commando's}
-       \label{tab:in2}
-       \centering
-               \begin{tabular}{|l|l|l|l|}
-                       \hline
-                       Tint\textbackslash Intensiteit  & 0 donkerder & 1 donkerder & 2 donkerder\\
-                       \hline
-                       0 stappen       & -             & push                  & pop\\\hline
-                       1 stap          & add           & subtract              & multiply\\\hline
-                       2 stappen       & divide        & mod                   & not\\\hline
-                       3 stappen       & greater       & pointer               & switch\\\hline
-                       4 stappen       & duplicate     & roll                  & in(number)\\\hline
-                       5 stappen       & in(char)      & out(number)   & out(char)\\\hline
-               \end{tabular}
+    \caption{Commando's}
+    \label{tab:in2}
+    \centering
+        \begin{tabular}{|l|l|l|l|}
+            \hline
+            Tint\textbackslash Intensiteit    & 0 donkerder & 1 donkerder & 2 donkerder\\
+            \hline
+            0 stappen    & -         & push            & pop\\\hline
+            1 stap        & add        & subtract        & multiply\\\hline
+            2 stappen    & divide    & mod            & not\\\hline
+            3 stappen    & greater    & pointer        & switch\\\hline
+            4 stappen    & duplicate    & roll            & in(number)\\\hline
+            5 stappen    & in(char)    & out(number)    & out(char)\\\hline
+        \end{tabular}
 \end{table}