Denkende Machines -- Computers, rekenen, redeneren - CWI
Denkende Machines -- Computers, rekenen, redeneren - CWI
Denkende Machines -- Computers, rekenen, redeneren - CWI
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
3.3. PROGRAMMEREN 81<br />
y := EMPTY() schrijven we kortweg y := 0. Ook voor andere gehele getallen wordt gewoon de<br />
gebruikelijke decimale notatie gebruikt.<br />
Ook Boolese connectieven vind je als functies terug in programmeertalen. De negatie bijvoorbeeld<br />
kunnen we simpel definiëren, als volgt.<br />
[NOT](.) { if (X1?) { Y := EMPTY() } else { Y := EMPTY(); Y+ }<br />
In plaats van NOT(x) wordt vaak !x of ∼x geschreven. Zo kun je een ≤-test maken door NOT<br />
en LARGER te combineren: NOT(LARGER(x,y)).<br />
Opdracht 3.24 Schrijf functies voor conjunctie en disjunctie (notatie vaak x&y en x|y, of,<br />
x&&y en x||y).<br />
Opdracht 3.25 Schrijf een gelijkheidstest EQUALS (notatie vaak x=y of x == y) met behulp<br />
van LARGER.<br />
3.3.5 Datatypen<br />
De registermachines werken slechts met één soort register waarvan de inhoud een niet-negatief<br />
geheel getal representeert. In de werkelijkheid zijn dit rijen van bits die die getallen op een binaire<br />
manier coderen. Voor de uitkomst van een test hebben we niet een volledig register nodig maar<br />
slechts een enkele bit. In de meeste programmeertalen wordt dan ook van de programmeur<br />
verwacht dat deze vertelt wanneer hij zo’n minimaal register nodig heeft. Dit verloopt via het<br />
typeren van een variabele. Voordat ermee gerekend wordt moet een variabele getypeerd worden:<br />
zo vind je vaak expressies van de vorm x boolean om aan te geven dat er slechts een bit voor x<br />
gereserveerd hoeft te worden. Zo vind je ook vaak de typering x integer om aan te geven dat x<br />
als een geheel getal verrekend moet worden dat eventueel negatief is. Deze zou in een binaire<br />
registermachine behandeld kunnen worden als een register met een extra bit om het teken te<br />
coderen: 0 voor negatief en 1 voor niet-negatief. Niet-gehele getallen kunnen we representeren<br />
met twee registers waarvan er één de positie van de komma aangeeft en de ander het getal dat<br />
we zouden krijgen als we de komma zouden vergeten.<br />
Om een goede afwikkeling van functietoepassing te bewerkstelligen wordt bij de definitie van<br />
een functie ook verwacht van de programmeur dat hij aangeeft wat de types van de invoerargumenten<br />
zijn en natuurlijk ook wat het type van het resultaat zal zijn. Je kunt in een programma<br />
iets van de volgende vorm tegenkomen:<br />
boolean [FUN](integer real)<br />
Hierbij wordt aangegeven dat de functie FUN een Boolese resultaat (bit) geeft als zij aangeroepen<br />
wordt met als eerste argument een geheel getal (opgeslagen in een enkel register, met behulp<br />
van binair complement representatie) en als tweede argument een niet-geheel getal (opgeslagen<br />
in twee registers, ’eén voor de plaats van de komma, en één voor het getal zonder komma).<br />
Voor het gemak maken wij hier alleen verschil tussen een bit en een volledig register, maar<br />
in de praktijk worden verschillende maten registers gebruikt. Zo heb je voor plaatsing van de