Jak ty wyglądasz? - Wzorce
Dotychczas używaliśmy wyrażeń warunkowych if-then-else żeby rozgałęziać ścieżki w naszym programie w zależności od napotkanych danych. Jednak nie jest to szczególnie wygodne kiedy mamy do czynienia z bardziej złożonymi przypadkami.
Po pierwsze możemy jednym wyrażeniem testować kilka wartości:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: |
|
Po drugie możemy we wzorcach umieszczać również identyfikatory:
1: 2: 3: 4: |
|
Ostatecznie pozwala to na robienie różnych skomplikowanych wzorców. Jeśli pierwszy element to 1 to zwróc drugi, a jak nie to pierwszy.
1: 2: 3: 4: |
|
Kolejność wzorców ma znaczenie, bo są sprawdzane po kolei. Czyli w poniższej funkcji drugi wzorzec nigdy nie zostanie wykonany.
1: 2: 3: 4: |
|
O dalszych wzorcach będziemy jeszcze mówić po wprowadzeniu kolejnych typów danych.
Zadania
- Znajdź i-ty element w liście
- Znajdź rozmiar listy
- Odwróć listę (względem kolejności)
- Napisz funkcję
sum l, która zsumuje elementy listy - Napisz funkcję
merge l1 l2złączającą dwie listy orazflatten list, która bierze listę list i ją "spłaszcza" zwracając elementy w jednej liście - Napisz funkcję
maxl (x:int list), która zwróci element maksymalny z podanej listy - Napisz funkcję
distinctAside list, która usunie powtarzające się elementy -
Napisz funkcję
runLength list, która dla danej listy zwróci listę tupliint * 'a, określających częstość występowania w ciągu. Np.runLength [a;a;a;b;b;c;c;c;c;d;a] = [(3, a);(2, b);(4, c);(1, d);(1, a)] - Napisz funkcję
duplicate list, która zduplikuje każdy element (npduplicate [1;2;3] = [1;1;2;2;3;3]) - Napisz funkcję
split list i, która zwróci parę list, z których pierwsza jest rozmiaru conajwyżej i - Napisz funkcję
count predicate list, która dla danej listy i predykatu'a -> boolzwróci liczbę elementów podanej listy, które ten predykat spełniają.
Pytania? Jeśli wszystko jasne, to przechodzimy do następnego modułu
Full name: Patterns.charOfInt
Full name: Patterns.firstTwo
Full name: Microsoft.FSharp.Core.Operators.failwith
Full name: Patterns.firstOrSecondIfFirstIsOne
Full name: Patterns.always