HASKELL, ćwiczenie 2

1) Zdefiniuj funkcję rekurencyjną fib :: Int -> Int wyznaczającą wyrazy ciągu Fibonacci’ego: fib0 = 1

fib1 = 1

fibn = fibn-1 +fibn-2 dla n > 1

wybranym sposobem

2) Zdefiniuj funkcję rekurencyjną suma_ciagu, która dla danej liczby n daje sumę

1

1

1

1 +

+ +

K

+ n

2

3

Spróbuj przypisać tej funkcji odpowiedni typ, a następnie sprawdź jaki typ zostanie

przypisany tej funkcji w Haskellu.

3) Zdefiniuj funkcję rekurencyjną suma_listy :: [Int]->Int, która dla danej listy liczbowej wyznacza sumę jej elementów.

Rozpisz jak wygląda ewaluacja wyrażenia: suma_listy [1,9,5,8].

4) Zdefiniuj funkcję rekurencyjną usun :: Int ->[Int]->[Int], która z danej listy liczbowej usuwa wszystkie wystąpienia danego elementu na tej liście.

Rozpisz jak wygląda ewaluacja wyrażenia: usun 2 [1,2,2,5,8,2].

5) Zdefiniuj funkcję wstaw :: Int ->[Int]->[Int], która do danej listy liczbowej wstawia liczbę w odpowiednie miejsce tak, że lista wynikowa jest również uporządkowana.

Rozpisz jak wygląda ewaluacja wyrażenia: wstaw 5 [1,2,8,9].

6) Zdefiniuj funkcję rekurencyjną dzielniki :: Int -> [Int]-> [Int], która z danej listy liczbowej wybiera dzielniki danej liczby naturalnej.

7) Zdefiniuj następujące funkcje:

ostatni – wybiera ostatni element listy

usun_ostatni – usuwa ostatni element listy

na dwa sposoby (bez rekurencji) korzystając wyłącznie z funkcji: head, tail, reverse, length

oraz operatora !!.