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 codelgrootte $2$
29 ``Piet'' print en bij codel grootte $1$ ``Hello World''. Het programma is
30 zichtbaar in Figuur~\ref{fig:img4}.
31 \begin{figure}[H]
32 \caption{Codelgrootte 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\"interpreteerd 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 de 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
45 Tabel~\ref{tab:in1}.
46 \begin{table}[H]
47 \caption{Keuze volgende codel}
48 \label{tab:in1}
49 \centering
50 \begin{tabular}{|c|c|c|}
51 \hline
52 DP & CC & Codel gekozen\\
53 \hline
54 rechts & links & meest bovenste\\
55 rechts & rechts & meest onderste\\
56 omlaag & links & meest rechtse\\
57 omlaag & rechts & meest linkse\\
58 links & links & meest onderste\\
59 links & rechts & meest bovenste\\
60 omhoog & links & meest linkse\\
61 omhoog & rechts & meest rechtse\\
62 \hline
63 \end{tabular}
64 \end{table}
65
66 De overgang van kleur die wordt waargenomen bij het verplaatsen van codel naar
67 codel bepaalt de operatie die wordt uitgevoerd. De overgang in kleur is te
68 beschrijven in twee cyclische parameters genaamd tint en intensiteit. Deze
69 overgangen zijn beschreven in Tabel~\ref{tab:in2}. Als de interpreter een witte
70 codel binnengaat wordt er niks gedaan en vervolgt de interpreter zijn weg.
71 Zwarte codels en de rand van de afbeelding zijn blokkades en zorgen voor een CC
72 waardeverwisseling, komt de interpreter weer een blokkade tegen dan wordt de DP
73 een slag met de klok mee gedraaid, dit wordt herhaald tot er een
74 niet-blokkadeblok gevonden wordt. Als dit na acht pogingen nog niet het geval
75 is termineert het programma.
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
88 Tabel~\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}