Lab 9 - Przemysław Juszczuk
Transkrypt
Lab 9 - Przemysław Juszczuk
Języki deklaratywne dr Przemysław Juszczuk Katedra Inżynierii Wiedzy Laborki 9 dr Przemysław Juszczuk Języki deklaratywne Zadania znajdź ostatni element listy; znajdź k-ty element od listy; wypisz parzyste elementy listy w odwrotnej kolejności; usuń co trzeci element listy (operator not <>); sprawdź, czy lista jest palindromem; (patrz Seq.toList); usuń duplikaty w liście (patrz Seq.distinct lub Seq.distinctBy) duplikuj cyfry na liście. dr Przemysław Juszczuk Języki deklaratywne Ostatni element listy let wynik = List.head(List.rev([0..15]) lub let wynik = [0..15] |> List.rev |> List.head dr Przemysław Juszczuk Języki deklaratywne Znajdź k-ty element od końca listy let wynik n = List.nth(List.rev([0..15])) n Wypisz parzyste elementy listy w odwrotnej kolejności let wynik = List.rev(List.filter( \\ fun x -> x % 2 = 0) [0..15]) Usuń co trzeci element listy (operator not <>) let wynik n = List.nth(List.rev([0..15])) n dr Przemysław Juszczuk Języki deklaratywne Palindrom - łatwiejszy sposób (lista) let palindrom lancuch = List.rev lancuch = lancuch Palindrom - Trochę trudniejszy sposób let palindrome2 str = List.rev(Seq.toList str) = \\ Seq.toList str let w = palindrome2 = "abb c bba" dr Przemysław Juszczuk Języki deklaratywne Usuń co trzeci let wynik = List.filter(fun x -> x % 3 <> 0) [0..15]) Usuń duplikaty let d = Seq.distinctBy id [1;1;2;2;3;3] Duplikuj cyfry na liście let wynik = List.map(fun x ->100*x + 10*x+x) [1..5] dr Przemysław Juszczuk Języki deklaratywne Dopasowanie wzorca match expr with | pat1 | pat2 | pat3 | _ -> -> result1 -> result2 when expr2 -> result3 defaultResult dr Przemysław Juszczuk Języki deklaratywne Uwaga - źle - nie mamy opcji default let x = match 42 with | 1 -> "a" | 2 -> "b" let x = match 42 with | 1 -> "a" | 2 -> "b" | _ -> "z" dr Przemysław Juszczuk Języki deklaratywne Zadania dla poszczególnego miesiąca zwróć odpowiednią porę roku. Przykład: styczeń - zima, lipiec - lato. dla oceny 3 i więcej zwróć informację o zaliczeniu, dla 2.5 dodatkowym pytaniu, a dla oceny 2 - niezaliczeniu. dr Przemysław Juszczuk Języki deklaratywne let poraRoku m = match m with | "styczen" | "luty" | "marzec" -> printfn "Zima" | "kwiecien" | "maj" | "czerwiec" -> printfn "Wiosna" | "lipiec" | "sierpien" | "wrzesien" -> printfn "Lato" | "pazdziernik" | "listopad" | "grudzien" -> printfn "Jesien" | _ -> printfn "Złe dane" poraRoku "luty" let ocena m = match m with | 2.0 -> printfn "niezaliczone" | 2.5 -> printfn "dopytka" | _ -> printfn "zaliczone" ocena 3.5 dr Przemysław Juszczuk Języki deklaratywne let PorownajLiczby x = match x with | (v1, v2) when v1 > v2 -> printfn "%d większe od %d" v1 v2 | (v1, v2) when v1 < v2 -> printfn "%d mniejsze od %d" v1 v2 | (v1, v2) -> printfn "%d jest równe %d" var1 var2 PorownajLiczby (5,15) dr Przemysław Juszczuk Języki deklaratywne Zadania określ znak liczby wejściowej; funkcja zwracająca wartość bezwzględną liczby (przy pomocy match); n-ty wyraz ciągu fibonacciego; wyznaczenie silni. dr Przemysław Juszczuk Języki deklaratywne Określ znak liczby wejściowej let znak = function | 0 -> 0 | x when x < 0 -> -1 | x when x > 0 -> 1 Wartość bezwzględna let abs = function | 0 -> 0 | x when x < 0 -> x*(-1) | x when x > 0 -> X dr Przemysław Juszczuk Języki deklaratywne Fibonacci let rec fib n = match n with | 1 | 2 -> 1 | n -> fib(n-1) + fib(n-2) dr Przemysław Juszczuk Języki deklaratywne Fibonacci let fib n = let lookup = Array.create (n+1) 0 let rec f = fun x -> match x with | 1 | 2 -> 1 | x -> match lookup.[x] with | 0 -> lookup.[x] <- f(x-1) + f(x-2) lookup.[x] | x -> x f(n) dr Przemysław Juszczuk Języki deklaratywne Silnia let rec fac n = match n with | 0 -> 1 | 1 -> 1 | n -> n * fac ( n - 1 ) printfn "(Silnia 5) = %i" (fac 5) dr Przemysław Juszczuk Języki deklaratywne Wykresy i rysowanie wykresów http://www.tryfsharp.org/Learn/data-visualization http://www.tryfsharp.org/Learn/financial-computing dr Przemysław Juszczuk Języki deklaratywne Zadania wypisz wszystkie liczby pierwsze mniejsze od 1000 algorytm euklidesa Oblicz pierwiastki równania kwadratowego (z wykorzystaniem funkcji lambda) dr Przemysław Juszczuk Języki deklaratywne Liczby pierwsze let isPrime n = let rec check i = i > n/2 || (n % i <> 0 && check (i + 1)) check 2 let nums = [ 16; 17; 3; 4; 2; 5; 11; 6; 7; 18; 13; 14; ] let listPrime lst = lst |> List.filter isPrime nums |> listPrime |> printfn "%A" dr Przemysław Juszczuk Języki deklaratywne Algorytm euklidesa - NWD let rec NWD = function | (0, n) -> n | (m, n) -> NWD(n % m, m); dr Przemysław Juszczuk Języki deklaratywne