summaryrefslogtreecommitdiff
path: root/intro.tex
diff options
context:
space:
mode:
authorCamil Staps2016-04-29 12:05:52 +0200
committerCamil Staps2016-04-29 12:05:52 +0200
commit6ae77313606978502e1d4611249cd85a7b9d2651 (patch)
treec8428db6398743917ace3d54c0b9b2f86edb9071 /intro.tex
parentLabels (diff)
Inleiding
Diffstat (limited to 'intro.tex')
-rw-r--r--intro.tex56
1 files changed, 56 insertions, 0 deletions
diff --git a/intro.tex b/intro.tex
new file mode 100644
index 0000000..742208e
--- /dev/null
+++ b/intro.tex
@@ -0,0 +1,56 @@
+% vim: set spelllang=nl:
+\section{Inleiding}
+\label{sec:intro}
+
+Smurf is een esoterische programmeertaal oorspronkelijk ontworpen door Matthew
+Westcott. In de specificatie \cite{safalra} beschrijft hij kort wat Smurf is:
+\begin{quote}
+ Smurf = String-based MURiel Forthoid
+
+ Smurf is a tarpit based on the self-propagation paradigm featured in Muriel.
+ The only native data type is the string, and operations are carried out on
+ strings in a forty manner.
+\end{quote}
+We hebben dus te maken met een Forth-achtige programmeertaal. De eigenschappen
+hiervan die we terugzien in Smurf zijn voornamelijk reflection,
+stackgeörienteerd en `geconcateneerd programmeren'. We kunnen het programma dus
+dynamisch aanpassen, werken met een stack en schrijven een programma als één
+grote functiecompositie (zonder met functieapplicaties te werken). Voordat we
+alle commando's bespreken is een voorbeeld op zijn plaats.
+
+\begin{exmp}
+ We bekijken het volgende programma:
+ \begin{smurf}"papa" "smurf" + o\end{smurf}
+ Hier gebruiken we drie functiecomposities om vier functies aan elkaar te
+ knopen:
+ \begin{itemize}
+ \item \smurfinline{"papa"} zet de string `\texttt{papa}' op de stack.
+ \item \smurfinline{"smurf"} zet de string `\texttt{smurf}' op de stack.
+ \item \smurfinline{+} concateneert de twee elementen bovenop de stack
+ (eerst gepushte element eerst) en zet het resultaat op de stack.
+ \item \smurfinline{o} output het element bovenop de stack.
+ \end{itemize}
+ De output van dit programma is dus `papasmurf'.
+
+ We hebben spaties gebruikt voor de leesbaarheid. Dit is toegestaan maar niet
+ vereist. Het programma \smurfinline{"papa""smurf"+o} is eveneens geldig.
+\end{exmp}
+
+Naast de stack kent Smurf ook een \emph{variable store} die variabelenamen
+(strings) naar waardes (strings) stuurt. Het gebruik hiervan is best te
+illustreren met een voorbeeld:
+
+\begin{exmp}
+ We bekijken het volgende programma:
+ \begin{smurf}"smurf" "papa" p "papa" g o\end{smurf}
+ Nadat `smurf' en `papa' op de stack zijn gezet gebruiken we \smurfinline{p}
+ om de variabele `papa' de waarde `smurf' te geven. Hierna is de stack weer
+ leeg. Vervolgens zetten we `papa' op de stack en gebruiken we \smurfinline{g}
+ om het bovenste element als variabele op te zoeken in de variable store en de
+ waarde ervan op de stack te zetten. De stack bestaat nu dus uit het element
+ `smurf'. Met \smurfinline{o} sturen we deze string naar de output.
+\end{exmp}
+
+\input{introcoms}
+\input{org}
+