Opprett og last inn kildekodefil i Haskell (WinHugs)
1: Opprett ny fil med notepad eller tilsvarende. I vårt eksempel Load.hs
2: I filen skriver vi
module Load where x = 1 y = 2 z = 3 |
Det som er verdt å merke seg her er at navnet på modulen tilsvarer filnavnet "Load" og "Load.hs"
3: Lagre filen.
4: I WinHugs "File" -> "Open", og velg den filen du nettopp opprettet.
Hugs> :load "D:\\Haskell\\Load.hs"
Hugs session for: file:{Hugs}\packages\hugsbase\Hugs\Prelude.hs file:{Hugs}\packages\base\Prelude.hs file:{Hugs}\packages\hugsbase\Hugs.hs file:.\Load.hs Load> |
5: Vi kan nå teste programmet vårt.
Load> x 1 :: Integer |
Load> x + y + z 6 :: Integer |
Load> x * y + z 5 :: Integer |
6: Vi har nå laget en ny module "Load", og lastet denne i Interpreteren vår. Den har da automatisk blitt satt til aktiv modul. Der vi tidligere har hatt "Prelude>" som promt har vi nå fått "Load>".
Dette impliserer at også "Prelude" er en module, noe som stemmer. "Prelude" er standardmodulen som inneholder de grunnleggende definisjonene som : + * fst snd og så videre.
PS! Om du planlegger å kompilere modulen til et kjørbart program må den here Main, samt inneholde en main metode.
module Main where
main = putStrLn "Hei verden" |
Husk også at Hugs ikke er en kompilator, kun en Interpreter. Men om du har lagt inn ghc kan du kompilere v.h.a denne kommandoen:
ghc --make Main.hs -o main.exe
Du får nå en kjørbar fil som du kan starte ved å skrive:
main.exe
Eventuellt vil Eclipse Haskell pluginen generere .exe filer for deg dersom du bruker denne.
Fibonacci
For de som er ukjent med Fibonacci tallrekken så anbefaler vi å ta en rask kikk her.
Fibonacci rekken er definert på følgende måte:
fib 0 = 1
fib 1 = 1
fib n = fib (n−1) + fib (n−2), for n > 1
Vi er optimistiske og klipper / limer dette rett inn i Load.hs og laster modulen inn på ny.
module Load where
fib 0 = 1 fib 1 = 1 fib n = fib (n-1) + fib (n-2) |
public class Fibonacci { public static long fib(int n) { if (n <= 1) return n; else return fib(n-1) + fib(n-2); }
public static void main(String[] args) { int N = Integer.parseInt(args[0]); for (int i = 1; i <= N; i++) System.out.println(i + ": " + fib(i)); }
} |
For morro skyld tar vi og med en tilfedig Java implementasjon. Du kan jo selv bestemme hvilken du likte best, spesielt m.t.p definisjonen av Fibonacci rekken.
Og om du var i tvil, Haskell implementasjonen fungerer som den skal, og er et godt eksempel på enkelheten og oversiktligheten til språket.
Load> fib 0 1 :: Integer |
Load> fib 1 1 :: Integer |
Load> fib 10 89 :: Integer |
Load> fib 100 354224848179261915075 :: Integer |
NB! I siste eksempelet "fib 100" har jeg jukset. Denne tar så lang tid å evaluere rekursivt at jeg måtte slå opp resultatet istedetfor. Men poenget her var å vise at vi ved kun å bruke definisjonen på fibonacci rekken har laget et program som beregner et vilkårlig tall i rekken.
Oppgave: Finn en "feil" i fibonacci programmet definert over. Kan du lage et mer effektivt program for å beregne fibonacci rekken?