... | ... | @@ -21,8 +21,46 @@ fib :: Int -> Int |
|
|
Es folgt die eigentliche Funktionsdefinition.
|
|
|
|
|
|
``` {.haskell}
|
|
|
fib 0 = 1
|
|
|
fib 1 = 1
|
|
|
fib 2 = 1
|
|
|
fib n = fib (n-1) + fib (n-2)
|
|
|
```
|
|
|
|
|
|
Nun können wir das Programm laden und landen in der interaktiven DrHaskell-Eingabe:
|
|
|
```
|
|
|
marc@atlantis ~ $ drhaskell ~/tmp/bsp1.hs
|
|
|
\ \ Dr. Haskell version 0.1.0
|
|
|
\ \
|
|
|
/ \ Type ":?" for help.
|
|
|
/ /\ \
|
|
|
|
|
|
|
|
|
bsp1.hs (L1)>
|
|
|
```
|
|
|
Dort können wir Ausdrücke oder Typen auswerten:
|
|
|
```
|
|
|
bsp1.hs (L1)> fib 3
|
|
|
2
|
|
|
bsp1.hs (L1)> :t fib
|
|
|
fib :: Int -> Int
|
|
|
```
|
|
|
[Wikipedia sagt](https://de.wikipedia.org/wiki/Fibonacci-Folge), dass die dritte Fibonacci-Zahl die 2 ist, unsere Implementierung scheint zumindest nicht ganz falsch zu sein.
|
|
|
|
|
|
Es ist aber umständlich, immer "von Hand" zu testen. Deshalb suchen wir bei Wikipedia ein paar Fibonacci-Zahlen heraus: `fib 6 = 8`, `fib 8 = 21`, `fib 12 = 144`
|
|
|
Daraus schreiben wir nun ein paar Testfälle, die automatisch beim (Neu-)Laden des Moduls ausgeführt werden.
|
|
|
|
|
|
``` {.haskell}
|
|
|
-- > checkExpect 8 (fib 6)
|
|
|
-- > checkExpect 21 (fib 8)
|
|
|
-- > checkExpect 144 (fib 12)
|
|
|
```
|
|
|
|
|
|
Ein Testfall wird durch `-- >` eingeleitet. `checkExpect` ist eine spezielle Funktion für solche Tests, die zwei Ausdrücke, einen Sollwert und einen Istwert, nimmt und diese auf Gleichheit prüft.
|
|
|
Laden wir nun die Datei erneut, so erhalten wir die Ausgabe, dass alle unsere Testfälle positiv ausgefallen sind:
|
|
|
|
|
|
```
|
|
|
bsp1.hs (L1)> :r
|
|
|
Test 1: (Line 8) passed
|
|
|
Test 2: (Line 9) passed
|
|
|
Test 3: (Line 10) passed
|
|
|
``` |
|
|
\ No newline at end of file |