Daniel Karlsson (c11dkn@cs.umu.se) Jonas Markström (c11jmm@cs.umu.se) Oskar Mårtensson (c11omn@cs.umu.se) Patrik Nordström (c04pnm@cs.umu.



Relevanta dokument
Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Att använda pekare i. C-kod

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen?

Föreläsning 1 & 2 INTRODUKTION

Programmering A. Johan Eliasson

Objektorienterad programmering D2

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Programmeringsuppgifter 1

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

SMD 134 Objektorienterad programmering

Grunderna i stegkodsprogrammering

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

Föreläsning 6: Introduktion av listor

TAIU07 Matematiska beräkningar med Matlab

Programmeringsteknik med C och Matlab

PROGRAMMERING 2 GRUNDLÄGGANDE SEMANTIK 4

Tentamen OOP

Digitalt lärande och programmering i klassrummet

Twincat: PLC Control

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Sätt att skriva ut binärträd

8-4 Ekvationer. Namn:..

F5 Introduktion till digitalteknik

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

MMA132: Laboration 1 Introduktion till MATLAB

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Tentamen: Programutveckling ht 2015

Tentamen TEN1 HI

Grundläggande programmering med C# 7,5 högskolepoäng

Felsökning av mjukvara

Föreläsning 4: Kombinatorisk sökning

Datorsystem Laboration 2: Minnesmappade bussar

Björn Abelli Programmeringens grunder med exempel i C#

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Matematisk Modellering

Föreläsning 2: Avlusning och antilustekniker

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

LEGO Mindstorm-robot

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

Datastrukturer och algoritmer

Dugga Datastrukturer (DAT036)

Uppgift 1 (Oläsliga krypterade meddelanden)

NXT LEGO-robot laboration Programmering och felsökning av en LEGOrobot

DSV A Procedurell programmering 5 poäng Tentamen

För att skriva data till skärmen ( konsolen) används objektet System.out tillsammans med metoden println eller print.

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Användarhandledning Version 1.2

Editering, Kompilering och Exekvering av Javaprogram

Program & programmering

Programmerbar logik. Kapitel 4

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Grunderna i SQL del 1

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

IT för personligt arbete F6

1DV433 HT13. I vilken utsträckning har kursens innehåll och uppläggning gett förutsättningar för att du ska ha uppnått respektive lärandemål?

Visual Basic, en snabbgenomgång

Föreläsning 13 och 14: Binära träd

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 27 maj 2008

2.4. Teckensträngar och logiska uttryck

Tentaupplägg denna gång

Statistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs

16 Programmering TI -86 F1 F2 F3 F4 F5 M1 M2 M3 M4 M5

Gaussiska primtal. Christer Kiselman. Institut Mittag-Leffler & Uppsala universitet

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

En snabb titt på XML LEKTION 6

VHDL och laborationer i digitalteknik

Stack och subrutiner Programmeringskonventionen

Peter Ottosson 31/ Introduktionskurs i datateknik II1310

Föreläsning 4: Poster

Föreläsning 11. Giriga algoritmer

a), c), e) och g) är olikheter. Av dem har c) och g) sanningsvärdet 1.

Objektorienterad programmering i Java

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Introduktion till PHP

Objektsamlingar i Java

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

Tentamen i Objektorienterad programmering

Motivering och kommentarer till enkätfrågor

varandra. Vi börjar med att behandla en linjes ekvation med hjälp av figur 7 och dess bildtext.

OOP Objekt-orienterad programmering

LEGO NXT Robotprogrammering

Slutrapport för projektet Programmeringsundervisning i skolor med webbaserad konstprogrammering Annika Silvervarg, Linköping universitet

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Programmera en NXT Robot

Textsträngar från/till skärm eller fil

Lära känna skrivbordet

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

TDIU01 - Programmering i C++, grundkurs

Transkript:

UMEÅ UNIVERSITET 3 februari 2014 Institutionen för Datavetenskap Laborationsrapport Efterforskning om ett programspråk Programspråk 5DV086 FORTH Daniel Karlsson (c11dkn@cs.umu.se) Jonas Markström (c11jmm@cs.umu.se) Oskar Mårtensson (c11omn@cs.umu.se) Patrik Nordström (c04pnm@cs.umu.se)

FORTH Innehåll Innehåll 1 Språkets ursprung 1 2 Skaparens filosofi 1 2.1 Vision.......................................... 2 2.2 Omvänd polsk notation................................ 2 3 Vanliga och viktiga kommandon 3 3.1 Funktioner....................................... 3 3.2 Aritmetik och logiska operatorer........................... 3 3.3 IF/ELSE........................................ 5 3.4 Stack-hantering..................................... 5 3.5 Variabler........................................ 6 3.6 Användbara kommandon................................ 6 4 Fördelar & nackdelar med Forth 7 5 Forth i modern tid 7 Programspråk i 3 februari 2014

FORTH 2 Skaparens filosofi 1 Språkets ursprung Det var vid Kitt Peaks observatorium som FORTH kom till riktig användning för första gången 1970. Charles H. Moore, då 32 år gammal, hade på egen hand utvecklat språket under 1960-talet och kunde nu använda det för att rikta in anläggningens stora radioteleskop. Charles föddes i McKeesport utanför Pittsburgh 1938 och var duktig i skolan. Han antogs till MIT med ett stipendium tilldelat speciellt lovande studenter. Hösten 1957 skickade Ryssland upp Sputnik 1 i omloppsbana kring jorden och detta ledde till en febril aktivitet i USA. SAO (Smithsonian Astrophysical Observatory), ansvarig för att spåra satelliter, plockade in studenter för att göra beräkningar på dess bana. Charles skrev i samband med detta sitt första Figur 1: FORTH:s skapare Chuck H. Moore program i Fortran II (Ephemeris 4) för att utföra beräkningarna. Med programmet började hans anställning hos SAO där han jobbade med beräkningar av omloppsbanor, vid sidan av sina studier. På 1950-talet skedde programmering med hålkort. Det var som en tolk för att kontrollera programmen på dessa hålkort som FORTH startade. Tolken skrevs i Fortran och hade till en början några få kommandon. Efter att ha tagit ut en fysikexamen vid MIT började Moore att studera matematik vid Stanford 1961. Han jobbade då deltid vid Stanford Linear Center och skrev programmet Curve för att utföra statistiska beräkningar. Det använde en stack för att utvärdera inkommande kommandon och tillförde fler ord till det som skulle bli FORTH:s vokabulär. 1965 lämnade han Stanford och blev en frilansande programmerare. Han livnärde sig på att skriva program i Fortran, Algol, Jovial, PL/I och assemblerspråk. Det var nu som terminaler dök upp och FORTH förseddes med kommandon för inläsning och utskrift av tecken. 1968 började han jobba vid Mohasco och arbetade hårt för att använda Forth i samklang med de andra COBOL-modulerna. Forth kodades om i assembler. Tre år efter att Forth kommit till användning för allra första gången startade Charles, med hjälp av investerare, företaget Forth, Inc och kunde därefter göra Forth tillgängligt på olika plattformar: mini-, micro- och mainframe -datorer [Moore 2010]. 2 Skaparens filosofi Den främsta anledningen till att Chuck Moore skapade Forth var att han fann andra språk onödigt komplexa, med många lager som gör att det blir väldigt svårt att sätta sig in i allt som händer. Han såg detta som ett hinder dels för användare av program, då varje extra lager innebär ytterligare begränsningar i vad som kan utföras, och dels för programmerare, då de måste anpassa sig till konstruktioner och regler som tvingas på av dessa lager. [Forth, Inc 2014] Dessutom ogillade Moore att andra språk (Fortran, COBOL, Algol) gav väldigt lite direkt kontroll över hur datorn utför olika uppgifter medan assembler eller maskinkod var arbetskrävande att debugga. [Moore, 1970, s. 8-10] Programspråk 1 3 februari 2014

FORTH 2 Skaparens filosofi När Forth skapades fanns det två huvudtyper av programspråk. Interpreterande språk: Programkoden kompileras samtidigt som den körs vilket gör att det går snabbt att skriva program men programmen tar längre tid att köra. Kompilerande språk: Tar längre tid att skriva i och med att det måste kompileras separat (vilket tog lång tid back in the days) men är desto snabbare när det körs. Forth skapades med filosofin att vara det bästa av båda världarna. Dels så skulle det gå fort att skapa program med Forth och programmen skulle kompileras direkt och det slutgiltiga programmet skulle också gå att köra relativt fort. För att få detta att fungera så implementerade man Forth så att koden inte kompileras direkt till maskinkod utan till en lista innehållandes addresser till maskinkods-rutiner. Resultatet av denna teknik är alltså att Forth blev ett snabbt programspråk som dessutom var interaktivt. 2.1 Vision Chuck Moore definierade vad han kallade för The Basic Principle: Keep it simple Do not speculate! Do it yourself! Detta innebär att ett program bara ska ha de funktioner som faktiskt kommer att användas och inte innehålla sådant som kanske kan komma till användning senare. Om det uppstår ett behov för dessa funktioner senare ska de implementeras vid den tidpunkten. Chuck Moore menar att det finns oändligt många tänkbara funktioner som skulle kunna komma att användas, vilket leder till att varje enskild tänkbar funktion har sannolikheten 0 att faktiskt behövas. The Basic Principle innebär även att man ska undvika bibliotek med färdiga funktioner eftersom de är generella och innehåller mycket kod som inte behövs för just ditt ändamål. [Moore, 1970, s. 16] Denna princip är exakt vad Forth är. Forth har ett lager mellan människa och dator, vilket ger mycket direkt kontroll över vad datorn gör. Dessa designprinciper har lett fram till ett språk som genererar mycket kompakta, effektiva och direkt kontrollerbara program. 2.2 Omvänd polsk notation Forth är stackbaserat, vilket innebär att alla operatorer tar sina argument från stacken, utför beräkningen och returnerar eventuellt resultat till stacken. Syntaxen är anpassad efter detta och upplagd på datorns villkor. Därför används omvänd polsk notation, som påbjuder att operanderna anges in före operatorn. De kan då läggas på stacken och finnas tillgängliga när beräkningen ska göras. 7 9 + 3 => 3 7 9 * - Programspråk 2 3 februari 2014

FORTH 3 Vanliga och viktiga kommandon 3 Vanliga och viktiga kommandon Forth har en uppsättning kommandon som, relativt enkelt, går att utöka på egen hand med hjälp av funktioner. Kommandon är ofta centrerade kring stacken vilket innebär att dessa hämtar och/eller lägger till skapade värden på stacken. Kommentarer går att använda genom att skriva ett följt av ett mellanslag. T.ex. Här kan du skriva kommentaren. 3.1 Funktioner Funktioner kallas även för words i Forth. Dessa avslutas med ett semi-kolon (;) och kan t.ex. se ut såhär [ACM, 1993]: : ADD_10 ( t1 r ) \ Funktion som lägger till 10 på första talet på stacken. 10 + \ <Första talet på stacken> + 10 (RPN-tolkning) ; Sedan kan vi anropa funktionen genom att skriva: 5 ADD Forth svarar med: OK Om vi tömmer stacken, med., kommer Forth att svara:. 15 OK 3.2 Aritmetik och logiska operatorer Forth använder sig, som sagt var, av omvänd polsk notation (RPN). Detta innebär att aritmetiken kommer se lite annorlunda ut. De fyra räknesätten blir då: 10 5 + - Lägger 10 och 5 på stacken, sedan tas dessa värden och adderas. Resultat läggs på stacken. 10 5 - - Lägger 10 och 5 på stacken, sedan tas dessa värden och subtraheras. Resultat läggs på stacken. 10 5 * Lägger 10 och 5 på stacken, sedan tas dessa värden och multipliceras. Resultat läggs på stacken. 10 5 / Lägger 10 och 5 på stacken, sedan tas dessa värden och divideras. Resultat läggs på stacken. Dessa operatorer är heltalsoperatorer som har intervallet [ 2147483648, 2147483647] [Brodie, 2014, kap2]. Om vi har uttrycket: 4 + (17 12) Programspråk 3 3 februari 2014

FORTH 3 Vanliga och viktiga kommandon och ska skriva det i omvänd polsk notation blir det: alternativt 17 12 4 + 4 17 12 + eftersom vi först tar resultatet av 17 12 och lägger det på stacken, sedan adderar vi det med 4 (resultatet läggs till på stacken). Det bör noteras att det även finns hantering för flyttal, men detta tas inte upp i denna föreläsning [Brodie, 2014, kap5]. Forth representerar värdet TRUE som -1 (och ibland alla värden utom 0) och värdet FALSE som 0 [Haskell, 2013] med de vanliga villkorsoperatorerna: < Mindre än. > Större än. = Lika med. <> Icke lika med. <= Mindre än eller lika med. >= Större än eller lika med. T.ex. 5 10 < kommer lägga TRUE (-1) på stacken. Forth har även operatorer som bara kräver ett värde ur stacken och kollar mot 0: 0< Mindre än 0. 0> Större än 0. osv. Utöver villkorsoperatorerna har Forth även ett antal logiska operatorer: AND - Bitwise AND. OR - Bitwise OR. XOR - Bitwise XOR. NOT - Icke (Finns i vissa kompilatorer). T.ex. -1 0 AND kommer lägga 0 (FALSE) på stacken. Programspråk 4 3 februari 2014

FORTH 3 Vanliga och viktiga kommandon 3.3 IF/ELSE Forth använder sig av stacken när den ska evaluera sina IF...ELSE-satser. Om det översta värdet på stacken är TRUE (-1) så kommer det efter IF att exekvera, annars kommer det efter ELSE att exekveras. Alltså: IF <Detta exekveras om översta värdet på stacken är TRUE (-1)> ELSE <Detta exekveras om översta värdet på stacken är FALSE (0)> THEN ELSE kan även skippas så att det endast är kvar: IF <Detta exekveras om översta värdet på stacken är TRUE (-1)> THEN Loopar De loopar som Forth stöder är: DO...LOOP BEGIN...UNTIL BEGIN...WHILE...REPEAT BEGIN...AGAIN DO...LOOP kan liknas vid en for-loop i ett traditionellt programmeringsspråk. DO tar två värden från stacken som kommer vara ett intervall som loopen ska köra igenom, t.ex: 10 2 DO... LOOP...kommer loopa igenom 8 gånger, från 2 till 10. I en DO...LOOP kan man använda sig av I, som innehåller vilket värde i intervallet man befinner sig i. BEGIN...UNTIL kan liknas vid en do-while-loop i ett traditionellt programmeringsspråk. När programmet kommer till UNTIL så kollas översta värdet på stacken, är detta TRUE (-1) så kommer programmet inte göra om loopen igen, är översta värdet på stacken FALSE (0) så kommer programmet köra om loopen [Haydon, 1997]. BEGIN...WHILE...REPEAT är användbar när man vill kolla en flagga innan kodsekvensen körs. BEGIN <kod1> WHILE <kod2> REPEAT WHILE tar översta värdet på stacken som flagga. Om flaggan är TRUE så kommer <kod2> att köras, annars kommer loopen att skippas och programmet kommer fortsätta på kommandot efter REPEAT. När <kod2> har exekverats och programmet kommer till REPEAT så kommer programmet hoppa tillbaka till BEGIN. <kod1> innehåller oftast koden som sätter flaggan till WHILE. BEGIN...AGAIN är en oändlig loop och kan liknas vid en while(true) i traditionella programmeringsspråk. AGAIN är en unconditional branch till BEGIN [Quozl, 2014]. 3.4 Stack-hantering Eftersom stacken är en sån central del av Forth kommer programmeringsspråket med ett antal kommandon för hantering och manipulering av stacken. De vanligaste är [Lindström, 1984, 155-156]: Programspråk 5 3 februari 2014

FORTH 3 Vanliga och viktiga kommandon SWAP Byter plats på de två översta elementen på stacken. DUP Duplicerar det översta värdet på stacken. DROP Tar bort det översta värdet på stacken. OVER Lägger en kopia på det näst översta elementen överst på stacken. ROT Roterar stackens tredje element till stackens topp. PICK Tar översta värdet på stacken och går bakåt lika många steg i stacken (översta värdet räknas inte) som värdet och lägger det elementet överst på stacken. T.ex. 5 PICK kommer ta det sjätte elementet på stacken och lägga det överst. 3.5 Variabler Forth stöder användning av variabler. Man kan definiera variabler genom att skriva VARIABLE <namn>. På vissa kompilatorer och dialekter av Forth kommer variabeln även att få översta värdet på stacken som initiellt värde. Vi kan skriva: VARIABLE ABC Vilket kommer skapa variabeln ABC på en minnesadress. Vi kan få variablens minnesaddress genom att skriva: ABC och vi kan få värdet på variablen genom att lägga till @ efter variabelnamnet: ABC @ Resultaten kommer att läggas överst på stacken. För att tilldela värden på variabler använder vi oss av!. Funktionen! kommer ta de två översta elementen på stacken, en minnesadress och ett värde, och sätta värdet på minnesadressen. T.ex: 7 ABC! Varefter variabeln ABC får värdet 7. [Lindström, 1984, sid. 35-37] 3.6 Användbara kommandon CR - Nyrad. Sträng - Forth skriver ut strängen som är inom citattecknen.. är funktionen som skriver ut allt tills ett citattecken påträffas. Viktigt är att det måste vara ett mellanslag mellan citattecknen och strängen. Under projektets gång har ett antal kodsekvenser skrivits i Forth för att utforska programspråket. Bubblesort är en av de sorteringsalgoritmer som implementerats (se figur 3). En annan funktion är den primtalsutvärderande funktionen ISPRIME, som kontrollerar om det översta värdet i stacken är ett primtal eller ej, lägger svaret på stacken och skriver ut till användaren (se figur 4). Programspråk 6 3 februari 2014

FORTH 5 Forth i modern tid 4 Fördelar & nackdelar med Forth Figur 2: FORTH Forth är som sagt skapat för att vara en kombination av två olika typer av språk. Detta gör att det både är ett språk där det går snabbt att skriva program men även att programmen är snabba när de väl körs. En av de främsta fördelarna med Forth är att man inte bara kan använda det som ett högnivåspråk, utan även som ett lågnivåspråk. Detta gör att ett av de främsta användningsområdena för Forth är i microprocessorer eftersom det är lätt att hålla reda på vad som händer på instruktionsnivå med Forth. En annan fördel med Forth är att användardefinierade funktioner direkt blir ett eget kommando i språket och kan användas överallt i koden. Detta samt att språket är interaktivt gör att Forth går snabbt att lära sig då man slipper kompilera om hela koden separat varje gång man ändrar något. En nackdel med Forth är att själva koden är relativt svårläst och svårförståelig för en människa. Detta beror delvis på notationen som används (Omvänds polsk notation). Många kommandon som t.ex. fetch contents -kommandot har också en väldigt kort notation (skrivs som @) vilket ännu en gång gör språket svårläsligt för människor. Att hela programspråket är stackbaserat också kan gör det svårt att hålla reda på alla värden i programmet för en oinsatt programmerare. [Williams, 1980, h2g2 2004] 5 Forth i modern tid Forth var som populärast på 80-talet då språket var väl anpassat för att fungera i microkontroller. Sedan har språket används för att göra program i en rad olika områden, däribland matematik, el-teknik och rymdteknik. NASA är en av de organisationer som använt microprocessorer exekverande FORTH-program. Satelliten IMAGE sköts upp den 25:e Mars 2000 med uppdraget att undersöka jordens magnetosfär. Utrustningen bestod bland annat av en mottagare av ultraviolett strålning, som var kontrollerad av en FORTH-programmerad microprocessor. [?] [NASA 2000] Boening har även använt Forth för att konstruera delar av Boening 777s flygsystem. Forth slog dock aldrig igenom rejält och används idag enbart i moduler som boot-loaders (se t.ex. Open Firmware) och små inbyggda system. Det finns några implementationer av Forth som fortfarande underhålls som t.ex. GNUs Gforth vars senaste version släpptes 2013. Sedan har Forth även inspirerat andra språk såsom PostScript som är ett språk som används för att skriva vektorgrafik och är en standard för sidbeskrivning vid utskrift. [Wikipedia 2014] Programspråk 7 3 februari 2014

( BUBBLESORT FUNKTION SOM SORTERAR STACKENS N ÖVERSTA VÄRDEN, MAX 100. NÄR ANROP SKER SKALL STACKEN BESTÅ AV ETT ANTAL VÄRDEN OCH ANTALET VÄRDEN SOM SKA SORTERAS. T.EX. <VÄRDE> <VÄRDE> <VÄRDE> <ANTAL VÄRDEN> BUBBLESORT I DETTA FALL ÄR <VÄRDE> <VÄRDE> <VÄRDE> DEN OSORTERADE LISTAN. DEN SORTERADE LISTAN KOMMER SKRIVAS UT OCH SPARAS PÅ STACKEN MED DET HÖGSTA VÄRDET ÖVERST PÅ STACKEN. ) 100 CONSTANT MAXVALUES VARIABLE SORTED \ ANVÄNDS FÖR ATT KOLLA OM SWAPS HAR INTRÄFFAT. VARIABLE VALUES \ ANGER HUR MÅNGA VÄRDEN SOM SKICKATS IN. CREATE ARR MAXVALUES CELLS ALLOT \ SKA INNEHÅLLA VÄRDENA SOM SKA SORTERAS. : BUBBLESORT ( N LIST -- SORTED ) VALUES! VALUES @ 0 DO \ LÄGG IN VÄRDENA I ARRAYEN. VALUES @ 1 - I - CELLS ARR +! LOOP BEGIN \ BÖRJA SORTERINGEN. -1 SORTED! VALUES @ 1-0 DO \ GÅR IGENOM LISTAN EN GÅNG. I CELLS ARR + @ I 1 + CELLS ARR + @ > \ KOLLA VILKEN SOM ÄR STÖRST. IF \ KOLLA OM PLATSBYTE SKALL SKE. I CELLS ARR + @ \ LÄGG ELEMENT I PÅ STACKEN. I 1 + CELLS ARR + @ \ LÄGG ELEMENT I + 1 PÅ STACKEN. SWAP \ BYT PLATS. 0 SORTED! \ FLAGGA ATT LISTAN EJ VAR SORTERAD. I 1 + CELLS ARR +! \ LAGRA I ARRAYEN. I CELLS ARR +! THEN ; LOOP SORTED @ -1 = \ KOLLA OM LISTAN VAR SORTERAD. UNTIL \ OM EJ SORTERAD, LOOPA OM IGEN. CR \ UTSKRIFT. VALUES @ 0 DO I CELLS ARR + @ DUP. LOOP Figur 3: Ett kodexempel i Forth som sorterar stacken med algoritmen Bubblesort, icke-rekursivt.

ISPRIME VARIABLE VALUEISPRIME : ISPRIME ( r - t ) DUP -1 VALUEISPRIME! 2 > IF DUP 1-2 DO DUP I MOD 0 = IF THEN DROP LOOP THEN 0 VALUEISPRIME! VALUEISPRIME @ IF." YES IT S PRIME! " ELSE." NO, IT S NOT PRIME " THEN VALUEISPRIME @ ; Figur 4: Ett annat kodexempel i Forth. Denna funktion kollar om översta värdet på stacken är ett primtal, lägger en flagga på stacken och skriver ut svaret till användaren.

FORTH Referenser Referenser [Moore 2010] Charles H Moore, 2010-03, http://www.colorforth.com/bio.html, besökt 2014-01- 27 16:59 [Moore 1991] Charles H Moore, 1991, http://www.colorforth.com/hopl.html, besökt 2014-01- 29 10:38 [Wikipedia 2014] Wikipedia, Forth (Programming Language), http://en.wikipedia.org/wiki/forth_(programming_language), besökt 2014-01-29 13:00, senast uppdaterad 2014-01-19 01:22 [NASA 2003] NASA, 2003-04-14, http://web.archive.org/web/20101024223709/http://forth.gsfc.nasa.gov/, besökt 2014-01- 29 13:30 [NASA 2000] NASA, NASA Science Missions, http://science.nasa.gov/missions/image/, besökt 2014-01-29, 13:30 [Forth, Inc 2014] Forth, Inc 2014, The Evolution of Forth, http://www.forth.com/resources/evolution/evolve_1.html, besökt 2014-01-31 10:45, Senast Uppdaterad: 2014 [Williams, 1980] Williams, Gregg (1980), Byte magazine #8, McGraw-Hill Inc., Hancock, NH [h2g2 2004] h2g2, Forth - the Programming Language, www.h2g2.com/edited_entry/a2927360, besökt 2014-01-31 10:39, uppdaterad 2004-09-06 [Wikipedia 2014] Wikipedia foundation, PostScript en.wikipedia.org/wiki/postscript, besökt 2014-01-31 10:43, uppdaterad 2014-01-03 [FIG 2011] Forth Interest Group(2011), www.forth.org/successes.html, besökt 2014-01-29, uppdaterad 2011-05-27 [Moore, 1970] Moore, Charles H(1970), Pintaske, Juergen (2012), PROGRAMMING A PROBLEM-ORIENTED LANGUAGE, http://www.forth.org/pol.pdf, besökt: 2014-01- 03, uppdaterad: 2012-01-27 [Galli, 1984] Galli, Paul J (1984), Programmering i FORTH, Studentlitteratur, Lund [Winfield, 1983] Winfield, Alan (1983), THE COMPLETE FORTH, Sigma Technical press, Wilmslow [Lindström, 1984] Lindström, Bengt (1984), ABC om FORTH, Liber Teknikutbildning, Stockholm [ACM, 1993] Philip J. Koopman jr., ACM, A Brief Introduction to Forth, http://www.ece.cmu.edu/ koopman/forth/hopl.html, besökt 2014-02-03, uppdaterad: 1993 [Brodie, 2014] Leo Brodie, Starting FORTH:Arithmetic, http://www.forth.com/starting-forth/sf2/sf2.html, besökt: 2014-02-03, uppdaterad: 2014 [Haskell, 2013] Haskell, Richard E.,The Forth Course: Lesson 4 - Forth Decisions, http://www.forth-ev.de/wiki/doku.php/projects:4th_lesson_4, besökt: 2014-02-03, uppdaterad: 2013-06-06 21:27 Programspråk 10 3 februari 2014

FORTH Referenser [Haydon, 1997] Haydon, Glen B., The forth guide: chapter X - Structures, http://theforthsource.com/guide10.html, besökt: 2014-02-03, uppdaterad: 2011 [Quozl, 2014] Quozl, Forth Lesson 7, http://wiki.laptop.org/go/forth_lesson_7, besökt: 2014-02-03, uppdaterad: 2014-01-02 01:34 Programspråk 11 3 februari 2014