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 l2
złą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 -> bool
zwró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