PiF 3 | <terug> |
WITHIN kijkt of x in het gebied [a,b) ligt.
[ betekent inclusief en ) betekent exclusief.
Zo geven wiskundigen een gebied aan.
Voor gebieden van gehele getallen geldt:
[4,8] bevat 4 5 6 7 8 (4,8) bevat 5 6 7 [4,8) bevat 4 5 6 7 <-- (4,8] bevat 5 6 7 8
Bedenk dat alle getallen die niet in [a,b) liggen, in [b,a) liggen.
In Forth maakt maakt het hierbij niet uit of het om twee signed of twee unsigned getallen gaat.
In het geval van a=b ontstaat er [a,a) wat een ondefinieerbaar gebied is, d.w.z. onzin, want a zit er in en tegelijk ook weer niet.
Als je de drie argumenten van WITHIN als een geheel verschuift, verandert de uitkomst niet. Dat gaat ook op in Forth, want overflow en underflow veroorzaken hierbij geen problemen.
x a b WITHIN x+1 a+1 b+1 WITHIN x-100 a-100 b-100 WITHINgeven alle hetzelfde resultaat.
Dan moet dat ook gelden voor
x a b WITHIN x-a a-a b-a WITHIN x-a 0 b-a WITHINwat weer het zelfde is als:
x-a b-a U< \ Unsigned-kleiner-danOmgekeerd:
p q U<is het zelfde als
p 0 q WITHIN
Als WITHIN niet in jouw Forth zou zitten en U< wel, hoe zou je WITHIN dan definiëren? (Hier is een oplossing)
Hoe kun je er voor zorgen dat het niet uitmaakt of de gebruiker hoofdletters of kleine letters intypt als commando?
Een antwoord is:
Maak als programmeur eventuele kleine letters in de input van de gebruiker groot met het woord HOOFDLETTER en werk in het programma uitsluitend met hoofdletters.
HOOFDLETTER ( ch -- CH )Als ch een kleine letter is wordt CH de corresponderende hoofdletter, in de andere gevallen is ch=CH.
Hoe zal HOOFDLETTER ( ch -- CH ) eruit zien?
(Hier zijn een paar oplossingen)
Sommigen hadden dit woord al bedacht, maar de nadere kennismaking met WITHIN geeft misschien wel aanleiding tot een verbeterde versie?
Van iedereen die op de komenende Forthbijeenkomst (9 juni 2007) mee wil doen aan PiF, verwacht ik weer 'huiswerk'.
Groeten,
| <terug> |