211a
<< <> >>

211

De programmeertaal Forth
home
BASE veranderen voor de duur van één woord

HX DM BN

Leo: Je kunt in Forth met verschillende talstelsels werken door bijvoorbeeld HEX of DECIMAL in te typen. Nu heb ik ook wel eens gezien dat je met een dollarteken vooraan een getal geplakt aan kunt geven dat het om een hexadecimaal getal gaat, ook al zit Forth zelf op dat moment in de decimale toestand, maar in jouw Forth werkt dat niet. Toch lijkt me dat heel handig. En eigenlijk zou ik dat idee nog wel willen uitbreiden door het mogelijk te maken om, niet alleen aan getallen, maar ook aan woorden die getallen afdrukken zo'n dollarteken vast te plakken. $. en $U. en $.S om er een paar te noemen, zouden dan de varianten van . en U. en .S zijn die hun getallen hexadecimaal afdrukken. Is dat mogelijk zonder voor al die woorden apart nieuwe definities te hoeven maken?
 
Theo: Tja, tegen de tijd dat je het werken in verschillende talstelsels normaal gaat vinden, en dat is het in Forth, schroef je je eisen wat op en wil je eigenlijk wel een methode die nog minder typewerk vraagt. Lang leve de gebruikersvriendelijkheid.
 
Leo: Je klinkt niet erg enthousiast. Heb je iets tegen het idee?
 
Theo: Nee hoor, ik denk dat het wel kan. Een gewone Forth-interpreter leest een woord en zoekt het op in z'n woordenboek. Als hij het vindt is er geen probleem. Als hij het niet kan vinden, kijkt hij of het misschien een getal is, anders geeft hij het op. De routine die dát doet moet natuurlijk ook op de hoogte zijn van het verschijnsel "dollarteken vooraan een getal". Nou, als hij dat aankan, kun je er ook voor zorgen dat hij, als hij die $ aantreft, eerst weer gaat kijken of er een bestaand woord aan vastzit en pas in tweede instantie of het om een getal gaat.
Weet je, ik ben er niet zo voor dat de Forth-interpreter, die heel simpel kan zijn, bedorven wordt door dit soort bijkomstige rimram. Bovendien is het een ingreep in het systeem van een bestaande Forth als je deze mogelijkheid er aan toe wilt voegen. Daarvoor moet je op de hoogte zijn van systeemafhankelijke details.
 
Leo: Kan het niet eenvoudiger, zonder in de Interpreter in te grijpen ?
 
Theo: Ja dat kan, als je accoord gaat met een los woordje in plaats van een voorvoegsel dat aan het volgende vastgeplakt wordt. HX bijvoorbeeld:
HX 10  \ Lees de invoer als hex.
HX .S  \ Geef hex output.
>>