blob: 3e7ada85b54072f5f012a910a8d0ea246dc4e46e (
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
|
% vim: set spelllang=nl:
\section{Inleiding}
\label{sec:intro}
Smurf is een esoterische programmeertaal oorspronkelijk ontworpen door Matthew
Westcott. In het kort zijn de belangrijkste eigenschappen van Smurf de
volgende:
\begin{itemize}
\item Stack-geörienteerd: alle operaties werken op een stack van strings.
\item Reflection: het is mogelijk (en in veel gevallen zelfs noodzakelijk)
het programma zichzelf dynamisch aan te laten passen.
\item `Geconcateneerd programmeren': de taal kent geen functieapplicatie maar
alleen functiecompositie. Een programma is een functie, opgebouwd uit
kleinere functies. Bij het uitvoeren wordt die grote functie toegepast op
de initiële toestand. Bij deze initiële toestand hoort bijvoorbeeld een
lege stack.
\end{itemize}
Voordat we alle commando's bespreken is een klein 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. Hierbij wordt het bovenste element van de
stack verwijderd. 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}
|