1. Podstawowe polecenia interpretera ghci (?, set, module, info, type
Transkrypt
1. Podstawowe polecenia interpretera ghci (?, set, module, info, type
Języki i paradygmaty programowania – lab. 5 i 6. 1. Podstawowe polecenia interpretera ghci (?, set, module, info, type, load, cd) 2. Działania arytmetyczne (+, -, *, /, ^, **), notacja infiksowa i sufiksowa, liczby ujemne, operator negacji. 3. Operatory logiczne (&&, ||), wartości logiczne: True, False 4. Operatory porównania (==, <, <=, >, >=, /=). 5. Funkcja not. 6. Definiowanie zmiennych (let), polecenie :show bindings 7. listy (budowa listy np. [1,2,3], lista pusta [], lista z wykorzystaniem notacji numerycznej np. [1..5], lista nieskończona [1..]) 8. Operacje na listach (last, take, head, tail, drop, ++, :) 9. Łańcuchy i operacje na łańcuchach (polecenie putStrLn, getLine, lines), łańcuch jako lista znaków. 10. zmienna it 11. typy (Char, String, Int, Integer, Float, Double, Bool, Ratio (w module Data.Ratio)). 12. Funkcje (null, odd, compare), Funkcje liczbowe (mod, sqrt, succ, pred, truncate, round, floor, ceiling) 13. krotki i operacje na krotkach (fst, snd) Zad. 1. Napisać funkcję czyWieksza, która w zależności od podanych dwóch liczb zwróci wartość -1, 0, 1. Sprawdzić typ funkcji. Zad. 2. Napisać funkcję silnia. Sprawdzić typ funkcji. Zad. 3. Napisać funkcję przedOst, która zwraca przedostatni element listy przekazanej jako argument. Zad. 4. Napisać funkcję maks, która zwraca maksymalny element z listy przekazanej jako argument. Zad. 5. Napisz funkcję o nazwie poleProstokata obliczającą pole prostokąta. Zad. 6. Napisz funkcję o nazwie poleTrojkata obliczajacą pole trójkąta równobocznego o danym boku. Zad. 7. Napisz funkcję poleKola obliczającą pole koła o danym promieniu. Zad. 8. Napisz funkcję o nazwie objetoscProstop zwracającą objętość prostopadłościanu o zadanych długościach krawędzi. Zad. 9. Przy pomocy funkcji poleProstokat napisz funkcję poleKwadratu obliczającą pole kwadratu o zadanym boku. Zad. 10. Przy pomocy funkcji poleKola napisz funkcje objetoscWalca, która zwraca objętość walca o danej wysokości i promieniu podstawy. Zad. 11. Napisz funkcję dodajDoListy, która dodaje element do listy. Element dodawany do listy i lista przekazywane są jako argumenty funkcji. Sprawdź typ funkcji (:type dodajDoListy). Zad. 12. (if) Napisz funkcję pozdrowOsobe, która w zależności od przekazanego jako argument imienia, zwróci komunikat „Dzień dobry Panu!” lub „Dzień dobry Pani ”. Zad. 13. (case) Funkcję z Zad. 12 napisz przy pomocy instrukcji case. Przykład użycia case: przyklad x = case x of 1 -> 1 2 -> 10 3 -> 20 _ -> 30 -- wartość domyślna Zad. 14. (Złożenie funkcji) Napisz funkcję polowa i podwojona, które zwracają odpowiednio połowę i wartość podwojoną przekazanego argumentu. W ghci wykonaj polecenie podwojona(polowa x) a następnie (podwojona.polowa) x Zad. 15. (Zmienne lokalne w funkcji) Poniżej przedstawiono przykład funkcji ze zmiennymi lokalnymi: przyklad2 x = let y = 10 z = 20 in x + y + z Napisz funkcję pierwiastki, która dla argumentów a, b, c zwraca pierwiastki równania kwadratowego. Wykorzystaj zmienne lokalne (delta, pierwDelta). Funkcja powinna zwrócić dwuelementową krotkę pierwiastków równania ax2+bx+c=0. Dopisz przed definicją funkcji jej sygnaturę. Zad. 16. (instrukcje we-wy, czyli Hello World :-) ) Przykład użycia polecenia putStrLn: main = do putStrLn „Podaj imie” imie <- getLine putStrLn („Czesc ” ++ imie ++ „!”) Funkcja read konwertuje String na typ liczbowy, funkcja show konwertuje liczbę na String. Napisz program, który działa w następujący sposób: Podaj długość prostokata: 5 Podaj szerokość prostokąta: 10 Pole prostokata o bokach 5 i 10 wynosi 50. Zad. 17. (rekurencja) Przykład użycia rekurencji (rekursji), czyli używanie danej funkcji jako część jej definicji: silnia 0 = 1; silnia n = n * silnia(n-1) Napisać funkcję sumujListe, która zwraca sumę elementów listy przekazanej jako argument. Zad. 18. Napisać funkcję fibonacci, która dla podanej liczby naturalnej n zwróci n-tą liczbę Fibonacciego. (liczby Fibonacciego: 1 1 2 3 5 8 13 …, n-ta liczba jest sumą dwóch wcześniejszych). Zad. 19. Napisz funkcję o sygnaturze wypisz::Int->String->IO (), która dla podanej liczby naturalnej n i podanego łańcucha tekst wypisze n razy tekst. Zad. 20. Operator dwuargumentowy to dowolna funkcja o sygnaturze : a->a->a, gdzie a jest pewnym typem. Napisz operator o nazwie „+++”, który dla dwóch liczb x, y zwróć wartość x*y+2. Zastosuj najpierw sygnaturę (+++)::Integer->Integer->Integer a następnie zastosuj w sygnaturze operatora typ polimorficzny, tzn: (+++)::Num a => a->a->a Za każdym razem przetestuj operator w Ghci, jak jest różnica? Zad. 21. Napisać operator o następującej sygnaturze (&&&)::Eq a => [a]->[a]->[a] który dla podanych dwóch list, zwróci listę tych wspólnych elementów, które występują na tych samych miejscach w obydwu listach, np. ?> [1,5,6,3] &&& [1,2,6] [1,6] ?> (&&&) „Ala ma” „Kotaaa” „a” Zad. 22. Napisać operator (%%%), który dla podanych dwóch list zwróci listę wszystkich wspólnych elementów obydwu list. Zad. 23. Napisz operator o nazwie moje++, który zwróci sumę dwóch list przekazanych jako argumenty. Zad. 24. Napisz funkcje mojeNull sprawdzająca czy podana lista jest pusta. Zad. 25. Napisz funkcję o następującej sygnaturze: inverse::Show a => [a]->[a] która dla podanej listy zwróci listę elementów w odwrotnej kolejności. Zad. 26. Napisz funkcję o nazwie doF, która dla podanej funkcji i listy, zwraca listę wartości elementów tej listy po zastosowaniu danej funkcji, np: (Jaka jest sygnatura tej funkcji?) ?> doF (+1) [2,3,4] [3,4,5] ?> doF inverse [„abc”,”def”,”gh”] [„cba”,”fed”,”gh”] Zad. 27. Poniżej przedstawiono przykłady wyrażeń z kwalifikatorami: [x+1 | x<- [0..10]] [x+y | x<- [1..100], y<-[1..50], odd x, odd y] [(x,2*x)| x<-[1,1.5..5]] Napisać wyrażenia z kwalifikatorami, generujące: a) Listę wszystkich liczb naturalnych 3-cyfrowych, podzielnych przez 5. b) Listę par liczb naturalnych parzystych, których iloczyn wynosi 100. c) Listę trójek pitagorejskich (a,b,c) z określonego zakresu, tzn. takich liczb, że a^2+b^2 = c^2.