summaryrefslogtreecommitdiff
path: root/cleansmurf-rules.tex
diff options
context:
space:
mode:
Diffstat (limited to 'cleansmurf-rules.tex')
-rw-r--r--cleansmurf-rules.tex30
1 files changed, 17 insertions, 13 deletions
diff --git a/cleansmurf-rules.tex b/cleansmurf-rules.tex
index 2e71c12..a2b08b7 100644
--- a/cleansmurf-rules.tex
+++ b/cleansmurf-rules.tex
@@ -5,26 +5,30 @@ Iedere semantiekregel vertaalt min of meer direct naar een functiealternatief
voor \CI{step}. Echter, omdat we geen \CI{run}- maar een \CI{step}-functie
schrijven, moeten we compositie expliciet maken.
-Als voorbeeld zullen we de implementatie van $\StmHead$ bekijken. Aangezien
-\CI{pop} en \CI{head} allebei een \CI{Maybe} opleveren, kunnen we de resultaten
-gemakkelijk binden. Vervolgens wordt de stack geüpdate en wordt de rest van het
-programma (\CI{p}) teruggegeven. De IO-toestand wordt zonder gebruik
-doorgegeven. Het vierde argument hebben we niet nodig en kan dus worden
-genegeerd.
+Als voorbeeld zullen we de implementatie van $\StmHead$ bekijken. De
+semantiekregel voor dit syntaxelement zag er als volgt uit:
+\therheadns
+
+Aangezien \CI{pop} en \CI{head} allebei een \CI{Maybe} opleveren, kunnen we de
+resultaten gemakkelijk monadisch \emph{bind}en. Vervolgens wordt de stack
+geüpdatet en wordt de rest van het programma (\CI{p}) teruggegeven. De
+IO-toestand wordt zonder gebruik doorgegeven. Het vierde argument hebben we
+niet nodig en kan dus worden genegeerd.
\lstinputlisting[firstline=213,lastline=215]{CleanSmurf/Smurf.icl}
-Andere regels, voor $\StmPush$, $\StmTail$, $\StmCat$, $\StmQuotify$ en ook
-$\StmPut$ en $\StmGet$ gaan op soortgelijke wijze. Ook $\StmInput$ en
-$\StmOutput$ kunnen op dezelfde manier worden geschreven, afgezien van het feit
-dat de IO-toestand en -functies gebruikt moeten worden.
+Andere regels, voor $\StmPush$, $\StmTail$, $\StmCat$ en $\StmQuotify$ gaan op
+soortgelijke wijze. De commando's $\StmPut$ en $\StmGet$ hebben als enige
+verschil dat ze ook op de store werken. Ook $\StmInput$ en $\StmOutput$ kunnen
+op eenzelfde manier worden geschreven, afgezien van het feit dat de IO-toestand
+en -functies gebruikt moeten worden.
-In het geval van $\StmExec$ kunnen we handig gebruik maken van het feit dat
-\CI{step} een nieuw programma oplevert:
+Alleen $\StmExec$ behoeft nadere toelichting. Bij dit syntaxelement kunnen we
+handig gebruik maken van het feit dat \CI{step} een nieuw programma oplevert:
\lstinputlisting[firstline=228,lastline=230]{CleanSmurf/Smurf.icl}
Zoals te zien wordt een nieuwe toestand gemaakt (\CI{zero}) waarin dit nieuwe
programma (\CI{p}) wordt uitgevoerd. De compositie \CI{parse o fromString}
-parseert een String van de stack en levert een \CI{Maybe Program} op. Dus ook
+parseert een string van de stack en levert een \CI{Maybe Program} op. Dus ook
deze wat afwijkende regel levert geen problemen op.