laatste kleine aanpassingen
[sec1415.git] / introduction.tex
1 \subsection{\textit{Piet}}
2 \textit{Piet} is een esoterische, stack geori\"enteerde en ge\"interpreteerde
3 programmeertaal die is ge\"inspireerd door de Nederlandse kunstenaar Piet
4 Mondriaan. Programma's geschreven vooor \textit{piet} kunnen eruit zien als
5 abstracte kunst en worden aangeleverd als een afbeelding. Een programma dat
6 zijn doel nastreeft is bijvoorbeeld het volgende programma dat het woord
7 ``\textit{Tetris}'' print en ieder vlak van dezelfde kleur is van de vorm van
8 een van de blokken uit het originele \textit{Tetris} spel.
9 \begin{figure}[h]
10 \includegraphics[natheight=200px, natwidth=160px, height=50px, width=40px]{img1.png}
11 \end{figure}
12
13 \subsection{Beschrijving en vergelijking met \textit{While}}
14 \textit{Piet} en \textit{While} zijn beide imperatieve talen maar zijn toch erg
15 verschillend als het gaat om variabelenopslag en instructies. \textit{Piet}
16 slaat zijn variabelen op in een stack waar \textit{While} dit niet doet. In een
17 toestand in \textit{While} kan iedere gedeclareerde variabele opgevraagd
18 worden. Omdat \textit{Piet} de variabelen in een stack opslaat kan er alleen
19 maar de bovenste waarde opgevraagd worden.\\ In \textit{Piet} is een stack een
20 geordende rij van gehele getallen. De stack gedraagt zich volgens het LIFO(Last
21 in First Out) principe wat inhoudt dat er alleen het bovenste element
22 beschikbaar is.\\
23 Instructies worden gegeven door het binnengaan van een nieuwe codel
24 \footnote{Een codel is een blok $n\times n$ pixels waarbij $n\in\mathbb{N}$,
25 een argument aan de compiler bepaalt de waarde van $n$. De standaard waarde is
26 $1$}, de grootte van de codel is een interpreter argument en kan een groot
27 verschil maken in semantiek van het programma. Bij wijze van uitdaging heeft
28 een \textit{Piet} programmeur een programma gemaakt dat bij codel grootte $2$
29 ``Piet'' print en bij codel grootte $1$ ``Hello World''. Het programma is
30 zichtbaar in \ref{fig:img4}.
31 \begin{figure}[H]
32 \caption{Codel grootte maakt het verschil}
33 \label{fig:img4}
34 \centering
35 \includegraphics[natheight=46px, natwidth=50px, height=46px, width=50px]{img4.png}
36 \end{figure}
37 Een \textit{Piet} programma wordt ge\"interpreteert door een interpreter die te
38 vergelijken is met een agent die over de pixels loopt. De agent houdt een
39 aantal dingen bij terwijl hij aan het lopen is over de pixels namelijk:
40 \textit{codelchooser(CC), direction pointer(DP), vorig vlak(VK)}. De VK waarde
41 is de waarde van het vorige codel bij het bewegen naar een nieuwe codel. De
42 waarde van een codel is het oppervlakte van de codels met de zelfde kleur die
43 verlaten is. Het bepalen van de volgende codel wordt bepaald door een
44 combinatie van de CC en de DP, deze relatie staat beschreven in \ref{tab:in1}.
45 \begin{table}[H]
46 \caption{Volgend codel keuze}
47 \label{tab:in1}
48 \centering
49 \begin{tabular}{|c|c|c|}
50 \hline
51 DP & CC & Codel chosen\\
52 \hline
53 rechts & links & meest bovenste\\
54 rechts & rechts & minst bovenste\\
55 omlaag & links & meest rechtse\\
56 omlaag & rechts & meest linkse\\
57 links & links & meest onderste\\
58 links & rechts & meest bovenste\\
59 omhoog & links & meest linkse\\
60 omhoog & rechts & meest rechtse\\
61 \hline
62 \end{tabular}
63 \end{table}
64
65 De overgang van kleur die wordt waargenomen bij het verplaatsen van codel naar
66 codel bepaalt de operatie die wordt uitgevoerd. De overgang in kleur is te
67 beschrijven in twee cyclische parameters genaamd tint en intensiteit. Deze
68 overgangen zijn beschreven in \ref{tab:in2}. Als de interpreter een witte codel
69 binnengaat wordt er niks gedaan en vervolgt de interpreter zijn weg. Zwarte
70 codels en de rand van de afbeelding zijn blokkades en zorgt voor een CC
71 waardeverwisseling, komt de interpreter weer een blokkade tegen wordt de DP een
72 slag met de klok mee gedraaid, dit wordt herhaalt tot er een niet blokkade blok
73 gevonden wordt. Als dit na acht pogingen nog niet het geval is termineert het
74 programma.
75 \ref{tab:in2}.
76
77 \begin{table}[H]
78 \caption{Beide overgangcykels}
79 \label{tab:in2}
80 \centering
81 \begin{itemize}
82 \item{Tint:} rood$\rightarrow$ geel$\rightarrow$ cyaan$\rightarrow$ blauw$\rightarrow$ magenta
83 \item{Intensiteit:} licht$\rightarrow$ normaal$\rightarrow$ donker
84 \end{itemize}
85 \end{table}
86
87 De instructies die de overgangen uitdrukken staan beschreven in de tabel
88 \ref{tab:in2}.
89 \begin{table}[H]
90 \caption{Commando's}
91 \label{tab:in2}
92 \centering
93 \begin{tabular}{|l|l|l|l|}
94 \hline
95 Tint\textbackslash Intensiteit & 0 donkerder & 1 donkerder & 2 donkerder\\
96 \hline
97 0 stappen & - & push & pop\\\hline
98 1 stap & add & subtract & multiply\\\hline
99 2 stappen & divide & mod & not\\\hline
100 3 stappen & greater & pointer & switch\\\hline
101 4 stappen & duplicate & roll & in(number)\\\hline
102 5 stappen & in(char) & out(number) & out(char)\\\hline
103 \end{tabular}
104 \end{table}