blob: db6ef985c69e5b073d89730d1c67dfe73a850aa3 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
% 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{introexmp}
\input{org}
|