Forth (programmeringsspråk)
Fra Wikipedia, den frie encyklopedi
Forth er et programmeringsspråk og utviklingsmiljø utviklet av Charles Moore på slutten av 1960-tallet/begynnelsen av 1970-tallet. Språket er sentrert rundt bruken av en stack, og er kanskje mest kjent for sin postfiks-notasjon – også kalt polsk baklengsnotasjon (reverse polish notation). Forth bruker en blanding av kompilering og interpretering, og er i stand til å kompilere seg selv til en ny kompilator (såkalt metakompilering).
Den grunnleggende enheten som kan utføres eller kjøres i et Fort-system er et ord. Ord er organisert i ordlister (dictionaries), og man kan enkelt lage nye ord ved hjelp av eksisterende ord. Ord skilles med mellomrom, noe som gjør tolkning av språket enkelt.
Innhold |
[rediger] Hello world eksempel
Under er Hello world implementert i Forth:
." Hello World"
«."» er et ord som skriver den etterfølgende teksten til terminalen. Teksten må ende med et avsluttende anførselstegn. Det er derfor et mellomrom mellom «."» og selve teksten som skal skrives ut.
[rediger] Stacken
Forth er sentrert rundt en stack. De fleste ord manipulerer denne på en eller annen måte. Stacken kan litt forenklet visualiseres som en stabel, hvor man til enhver tid kun ser det øverste elementet i stabelen. Som en stabel av tallerkner hvor hver tallerken er påskrevet et tall.
Noen av de mest primitive opratorene definert av Forth er:
- dup
- Lag en kopi av det øverste elementet i stacken og legg det øverst.
- swap
- Bytt om rekkefølgen på de to øverste elementene i stacken.
- rot
- Hent det tredje elementet nede i stacken og legg det øverst.
- .
- (punktum, benevnes dot) Henter det øverste elementet fra stacken og skriver det ut til terminalen. Det nest øverste elementet blir liggende øverst.
Tall i seg selv er ord som legger sin egen verdi øverst på stacken. Operatorer som +,-,*,/ er definert som Forth-ord som henter to verdier fra stacken, og legger resultatet av operasjonen øverst.
Under er noen eksempler på bruk av stacken:
4 dup
Her legges verdien 4 på stacken, og dupliseres. Stacken vil nå inneholde to elementer, begge med verdien fire.
4 5 swap
Her legges verdien 4 på stacken etterfulgt av verdien 5. 5 ligger nå øverst på stacken og 4 neders. swap bytter om på de to, så 4 ligger øverst og 5 ligger nederst.
4 5 - .
Trekker 5 fra 4 og skriver ut resultatet (-1).
4 5 swap - .
Trekker 4 fra 5 og skriver ut resultatet (1).
[rediger] Ord og ordlister
I Forth definerer man nye ord ved ordet : (kolon). Nedenfor definerer vi et nytt ord som kvadrerer tallet øverst på stacken:
: square dup * ;
Det nye ordet «square» vil hver gang det kalles utføre operasjonen «dup *», som vil si å duplisere det øverste elementet i stacken, multiplisere de to og legge resultatet tilbake øverst på stacken. Resultatet vil bli at det øverste elementet i stacken har blitt kvadrert.
Legg forøvrig merke til mellomrommene mellom «:» og «square» og mellom uttrykket og «;». Både «:» og «;» er egne ord i Forth.
«square» er nå definert som et fullverdig ord på linje med alle andre ord som er definert i Forth. Vi kan bruke dette videre til å lage et ord som opphøyer verdien av det øverste elementet på stacken i tredje potens:
: cube dup square * ;
En kjøring av disse ordene vil f.eks. kunne se slik ut:
4 square . 16 ok 5 cube . 125 ok
Forth skriver ut resultatet og «ok» på samme linje idet vi trykker enter-tasten.
Både ord som er ferdigdefinerte fra Forth sin side, og ord du definerer selv, lagres i en ordliste. Samme ord kan lagres flere ganger. Den nye definisjonen av ordet vil da gjelde for all bruk etter det er definert, men vil ikke endre definisjonen til andre ord som bruker den gamle definisjonen. Man kan glemme definisjonen av et ord ved å bruke ordet forget. Forget vil få Forth til å glemme det ordet du ber den om i tillegg til alle ord som er definert etter dette.
Forth kan operere med med flere ordlister, og kan veksle mellom dem.
[rediger] Interpreter
Forth er et utviklingsmiljø like mye som et programmeringsspråk. Miljøet er ganske enkelt en kommandolinje som tolker det som blir skrevet på den som Forth-ord. Interpreteren er i seg selv et Forth ord, og kan benyttes i interaktive Forth-programmer.
Å utvikle programmer i Forth består tradisjonelt for en stor del av å lage nye ord, og teste dem nesten øyeblikkelig på kommandolinjen. Dette gir en veldig interaktiv utviklingsmodell, og oppfordrer til utvikling i små inkrementelle skritt.
[rediger] Eksterne lenker
Ada | Algol60 | Algol-68 | APL | Assembler | awk | BASIC | BETA | BLISS | C | C++ | C# | Caml | Cobol | Concurrent C | Delphi | Erlang | Forth | Fortran | Haskell | HyperTalk | INTERCAL | Java | Lisp | ML | Modula | Objective-C | OCaml | O'Haskell | Pascal | Perl | PHP | Pike | PL/I | Plankalkül | Prolog | Python | Ruby | Scheme | Simula | SML | Visual Basic