Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:pp:haskell:lab-simple-funcs [2018/05/07 11:01]
kkutt [Lab: Typy, funkcje i listy]
pl:dydaktyka:pp:haskell:lab-simple-funcs [2019/06/27 15:50] (aktualna)
Linia 24: Linia 24:
 sign x | x > 0  = 1 sign x | x > 0  = 1
        | x == 0 = 0        | x == 0 = 0
-       | x < 0 = -1</​code>​+       | x < 0 = -1</​code>​ ostatni warunek możemy też zapisać z wykorzystaniem słowa kluczowego `otherwise` (else z Javy): <code haskell>​sign :: Double -> Double 
 +sign x | x > 0  = 1 
 +       | x == 0 = 0 
 +       | otherwise ​= -1</​code>​
     * Najprostsza funkcja dodająca dwie liczby całkowite może być zdefiniowana jako: <​code>​sum : Z x Z --> Z : sum(m, n) = m + n</​code>​ W Haskellu możemy ją zrealizować na co najmniej trzy podstawowe sposoby:     * Najprostsza funkcja dodająca dwie liczby całkowite może być zdefiniowana jako: <​code>​sum : Z x Z --> Z : sum(m, n) = m + n</​code>​ W Haskellu możemy ją zrealizować na co najmniej trzy podstawowe sposoby:
       * Wykorzystując krotki:<​code haskell>​sum2a :: (Int, Int) -> Int       * Wykorzystując krotki:<​code haskell>​sum2a :: (Int, Int) -> Int
Linia 30: Linia 33:
       * 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>​
  
Linia 37: Linia 40:
   - 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:​ 
-  - Napisz funkcję, która zwraca elementy, które na liście wejściowej **pojawiły się co najmniej n razy**. Funkcja powinna zwracać ​-1, gdy nie ma takich elementów ​na liście.\\ Przykłady:​ +    * <code haskell>usunduplikaty "​accabb"​ = "​acb"​</​code>​ 
-    * conajmniejn([4,​5,​2,​5,​4,​3,​1,​3,​4],2= [4,5,3] +    * <code haskell>usunduplikaty "​abc"​ = "​abc"​</​code>​ 
-    * conajmniejn([4,​5,​2,​5,​4,​3,​1,​3,​4],4-1+  - 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] 4 = []
  
  
pl/dydaktyka/pp/haskell/lab-simple-funcs.1525683696.txt.gz · ostatnio zmienione: 2019/06/27 15:54 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0