Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
Nowa wersja
Both sides next revision
|
pl:dydaktyka:pp:haskell:lab-simple-funcs [2018/05/08 10:46] kkutt [Zadania] |
pl:dydaktyka:pp:haskell:lab-simple-funcs [2018/05/15 10:10] kkutt [Zadania] |
* Wykorzystując listy:<code haskell>sum2b :: [Int] -> Int | * Wykorzystując listy:<code haskell>sum2b :: [Int] -> Int |
sum2b (m:n:_) = m + n</code> | sum2b (m:n:_) = m + n</code> |
* Wykorzystując [[https://wiki.haskell.org/Currying|rozwijanie funkcji (currying)]] (więcej na ten temat będzie w laboratorium 4):<code haskell>sum2c :: Int -> Int -> Int | * Wykorzystując [[https://wiki.haskell.org/Currying|rozwijanie funkcji (currying)]] (więcej na ten temat będzie w laboratorium 3):<code haskell>sum2c :: Int -> Int -> Int |
sum2c m n = m + n</code> | sum2c m n = m + n</code> |
| |
- Uruchom i przeanalizuj wszystkie **przykłady z Wprowadzenia**. | - Uruchom i przeanalizuj wszystkie **przykłady z Wprowadzenia**. |
- Na rozgrzewkę: napisz własną implementację funkcji **zip** - znasz ją już zapewne z Pythona, tak samo działa w Haskellu :-) jako argument przyjmuje dwie listy, w wyniku zwraca listę dwuelementowych krotek: w pierwszej krotce znajdują się pierwsze elementy z obydwu list, w drugiej znajdują się drugie elementy, itd.\\ Przykłady: | - Na rozgrzewkę: napisz własną implementację funkcji **zip** - znasz ją już zapewne z Pythona, tak samo działa w Haskellu :-) jako argument przyjmuje dwie listy, w wyniku zwraca listę dwuelementowych krotek: w pierwszej krotce znajdują się pierwsze elementy z obydwu list, w drugiej znajdują się drugie elementy, itd.\\ Przykłady: |
* zip([1,2,3],[4,5,6]) = [(1,4),(2,5),(3,6)] | * <code haskell>zip [1,2,3] [4,5,6] = [(1,4),(2,5),(3,6)]</code> |
* zip([1,2,3],"abc") = [(1,'a'),(2,'b'),(3,'c')] | * <code haskell>zip [1,2,3] "abc" = [(1,'a'),(2,'b'),(3,'c')]</code> |
- Wyobraźmy sobie eksperyment biologiczny, w którym wykorzystuje się dwa rodzaje bakterii. Co sekundę bakteria typu A dzieli się na dwie bakterie typu B, a bakteria typu B dzieli się na jedną typu A i jedną typu B. Załóżmy, że bakterie nie umierają podczas eksperymentu. | - Wyobraźmy sobie eksperyment biologiczny, w którym wykorzystuje się dwa rodzaje bakterii. Co sekundę bakteria typu A dzieli się na dwie bakterie typu B, a bakteria typu B dzieli się na jedną typu A i jedną typu B. Załóżmy, że bakterie nie umierają podczas eksperymentu. |
- Na początku eksperymentu (w momencie 0) mamy dokładnie dokładnie dwie bakterie: jedną typu A i jedną typu B. Napisz funkcję, która **wyliczy liczbę bakterii obydwu typów w czasie s sekund od rozpoczęcia eksperymentu**. | - Na początku eksperymentu (w momencie 0) mamy dokładnie dokładnie dwie bakterie: jedną typu A i jedną typu B. Napisz funkcję, która **wyliczy liczbę bakterii obydwu typów w czasie s sekund od rozpoczęcia eksperymentu**. |
- Obejrzyj wartości funkcji dla n ∈ {5, 7} | - Obejrzyj wartości funkcji dla n ∈ {5, 7} \\ spodziewany wynik: <code haskell>map bakteria [0..7] = [(1,1),(1,3),(3,5),(5,11),(11,21),(21,43),(43,85),(85,171)]</code> |
- W jaki sposób zmienią się wyniki, jeżeli eksperyment rozpoczniemy posiadając dokładnie **dwie bakterie typu A**? Napisz drugą funkcję, która to zamodeluje. | - W jaki sposób zmienią się wyniki, jeżeli eksperyment rozpoczniemy posiadając dokładnie **dwie bakterie typu A**? Napisz drugą funkcję, która to zamodeluje. |
- Napisz funkcję liczącą wartość **supercyfry** dla zadanego argumentu. Supercyfrę dla danej liczby całkowitej x definiujemy jako:\\ - x, jeżeli x jest jednocyfrową liczbą\\ - supercyfrę od xx, gdzie xx to suma cyfr liczby x (dla x mających co najmniej dwie cyfry)\\ Przykłady: | - Napisz funkcję liczącą wartość **supercyfry** dla zadanego argumentu. Supercyfrę dla danej liczby całkowitej x definiujemy jako:\\ - x, jeżeli x jest jednocyfrową liczbą\\ - supercyfrę od xx, gdzie xx to suma cyfr liczby x (dla x mających co najmniej dwie cyfry)\\ Przykłady: |
* supercyfra(8) = 8 | * supercyfra 8 = 8 |
* supercyfra(77) = supercyfra(7+7) = supercyfra(14) = supercyfra(1+4) = supercyfra(5) = 5 | * supercyfra 77 = supercyfra (7+7) = supercyfra 14 = supercyfra (1+4) = supercyfra 5 = 5 |
- Napisz funkcję, która **usuwa powtarzające się elementy z danej listy** (zostawia tylko pierwsze wystąpienie elementu)\\ Przykłady: | * supercyfra 1234 = 1 |
* usunduplikaty("accabb") = "acb" | * supercyfra 3912 = 6 |
* usunduplikaty("abc") = "abc" | - Napisz funkcję, która **usuwa powtarzające się elementy z danego stringa** (zostawia tylko pierwsze wystąpienie elementu)\\ Przykłady: |
| * <code haskell>usunduplikaty "accabb" = "acb"</code> |
| * <code haskell>usunduplikaty "abc" = "abc"</code> |
- Napisz funkcję, która zwraca elementy, które na liście wejściowej **pojawiły się co najmniej n razy**. Funkcja powinna zwracać pustą listę, gdy nie ma takich elementów.\\ Przykłady: | - Napisz funkcję, która zwraca elementy, które na liście wejściowej **pojawiły się co najmniej n razy**. Funkcja powinna zwracać pustą listę, gdy nie ma takich elementów.\\ Przykłady: |
* conajmniejn([4,5,2,5,4,3,1,3,4],2) = [4,5,3] | * conajmniejn [4,5,2,5,4,3,1,3,4] 2 = [4,5,3] |
* conajmniejn([4,5,2,5,4,3,1,3,4],4) = [] | * conajmniejn [4,5,2,5,4,3,1,3,4] 4 = [] |
| |
| |