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