Presentation is loading. Please wait.

Presentation is loading. Please wait.

dr Robert Kowalczyk WMiI UŁ

Similar presentations


Presentation on theme: "dr Robert Kowalczyk WMiI UŁ"— Presentation transcript:

1 dr Robert Kowalczyk WMiI UŁ
Summer School Haskell 2 dr Robert Kowalczyk WMiI UŁ

2 dr Robert Kowalczyk WMiI UŁ
Syntax in Haskell pattern matching f : Z -> Z f(0) = 1 f(1) = 3 f(2) = 6 f(x) = 0 if only x<>0 and x<>1 and x<>2 f :: Int -> Int f(0) = 1 f(1) = 3 f(2) = 6 f(x) = 0 (or f(_)=0) dr Robert Kowalczyk WMiI UŁ

3 dr Robert Kowalczyk WMiI UŁ
Syntax in Haskell case of f : Z -> Z f(0) = 1 f(1) = 3 f(2) = 6 f(x) = 0 if only x<>0 and x<>1 and x<>2 f :: Int -> Int f x = case x of 0 -> 1 1 -> 3 2 -> 6 _ -> 0 dr Robert Kowalczyk WMiI UŁ

4 dr Robert Kowalczyk WMiI UŁ
Syntax in Haskell if ... else ... sgn : Z -> Z sgn(x) = -1 if only x<0 sgn(0) = 0 sgn(x) = 1 if only x>0 sgn:: Int -> Int sgn x = if x > 0 then 1 else if x == 0 then 0 else -1 sgn:: Int -> Int sgn x = if x > 0 then 1 else if x == 0 then 0 else -1 dr Robert Kowalczyk WMiI UŁ

5 dr Robert Kowalczyk WMiI UŁ
Syntax in Haskell guards ... sgn : Z -> Z sgn(x) = -1 if only x<0 sgn(0) = 0 sgn(x) = 1 if only x>0 sgn:: Int -> Int sgn x | x < 0 = -1 | x == 0 = 0 | otherwise = 1 sgn:: Int -> Int sgn x | x > 0 = 1 | x == 0 = 0 | x < 0 = -1 sgn:: Int -> Int sgn 0 = 0 sgn x | x > 0 = 1 | x < 0 = -1 dr Robert Kowalczyk WMiI UŁ

6 dr Robert Kowalczyk WMiI UŁ
Syntax in Haskell where bmiTell :: Float -> Float -> String   bmiTell weight height       | bmi <= skinny = ”You're underweight”       | bmi <= normal = ”You're normal”      | bmi <= fat    = ”You're overweight”       | otherwise     = ”You have a problem”       where bmi = weight / height ^ 2             skinny = 18.5             normal = 25.0             fat = 30.0   dr Robert Kowalczyk WMiI UŁ

7 dr Robert Kowalczyk WMiI UŁ
Syntax in Haskell let ... in ... cylinder :: (RealFloat a) => a -> a -> a cylinder r h = let sideArea = 2 * pi * r * h topArea = pi * r ^2 in sideArea + 2 * topArea dr Robert Kowalczyk WMiI UŁ

8 dr Robert Kowalczyk WMiI UŁ
Recursion Recursion in computer science is a method where the solution to a problem depends on solutions to smaller instances of the same problem (as opposed to iteration). The approach can be applied to many types of problems, and recursion is one of the central ideas of computer science. dr Robert Kowalczyk WMiI UŁ

9 dr Robert Kowalczyk WMiI UŁ
Recursion factorial :: Integer-> Integer factorial 0 = 1 factorial n = n * factorial (n-1) mult:: Int -> Int ->Int mult 0 n = 0 mult m n = n + mult (m-1) n dr Robert Kowalczyk WMiI UŁ

10 dr Robert Kowalczyk WMiI UŁ
Recursion fib :: Int -> Int fib 0 = 0 fib 1 = 1 fib n = fib (n – 2) + fib (n - 1) length’ :: [a] -> Integer length’ [] = 0 length’ (_:xs) = 1 + length’ xs dr Robert Kowalczyk WMiI UŁ

11 dr Robert Kowalczyk WMiI UŁ
Recursion maximum' :: (Ord a) => [a] -> a  maximum' [] = error ”list is empty”   maximum' [x] = x   maximum' (x:xs) = max x (maximum' xs) reverse' :: [a] -> [a]   reverse' [] = []   reverse' (x:xs) = reverse' xs ++ [x] dr Robert Kowalczyk WMiI UŁ

12 dr Robert Kowalczyk WMiI UŁ
Recursion zip' :: [a] -> [b] -> [(a,b)]   zip' _ [] = []   zip' [] _ = []   zip' (x:xs) (y:ys) = (x,y):zip' xs ys quicksort :: (Ord a) => [a] -> [a]   quicksort [] = []   quicksort (x:xs) =  smallerSorted ++ [x] ++ biggerSorted where smallerSorted = quicksort [a | a <- xs, a <= x]           biggerSorted = quicksort [a | a <- xs, a > x]    dr Robert Kowalczyk WMiI UŁ

13 dr Robert Kowalczyk WMiI UŁ
Read from keyboard readFromKeyboard = do putStr "Podaj x: " x <- getLine putStr "Podaj y: " y <- getLine putStrLn (show((read x::Float)+(read y::Float)))    show :: Show a => a -> String read :: Read a => String -> a dr Robert Kowalczyk WMiI UŁ

14 Higher order functions
map :: (a -> b) -> [a] -> [b]   map _ [] = []   map f (x:xs) = f x : map f xs     map (+2) [1,2,3,4] -> [3,4,5,6] map (length) [”I”,”love”,”Haskell”] -> [1,4,8]    filter :: (a -> Bool) -> [a] -> [a]   filter _ [] = []   filter p (x:xs)        | p x       = x : filter p xs       | otherwise = filter p xs   filter (>0) [ ] -> [1,2,3,4,5,6,7,8,9,10] filter (not.null) [[1,2,3],[],[3,4,5],[2,2],[],[]] -> [[1,2,3],[3,4,5],[2,2]]   dr Robert Kowalczyk WMiI UŁ

15 dr Robert Kowalczyk WMiI UŁ
Lambdas \ variables -> result      calculateOnList x = map (\a -> 2*a + 1) x    calculateOnLists x y = zipWith (\a b -> 2*a + 3*b + 1) x y    dr Robert Kowalczyk WMiI UŁ

16 Excercises with Teacher
Define the function max3 :: Float-> Float -> Float -> Float which returns maximum from any three real numbers. Ex. 2 Define two sequences {a_n} and {b_n} by formula a_{n}=a_{n-1}+b_{n-1}, a_{0}=1 and b_{n}=a_{n-1}*b_{n-1}, b_{0}=1. Then create two lists: - the list of k elements of sequence {a_n}, - the list of k elements of sequence {b_n}. dr Robert Kowalczyk WMiI UŁ

17 Excercises with Teacher and without 
Write the functions: firstFromList :: [a] -> a secondFromList :: [a] -> a lastFromList :: [a] -> a beforelastFromList :: [a] -> a which reads: first, second, last and before last element in any list. Ex. 4 Define the function sumPositiveElementsOnList :: [Int] -> Int which returns sum of all positive integer numbers from this list. dr Robert Kowalczyk WMiI UŁ

18 Excercises with Teacher’s help
Write the function howManyTimes :: a -> [a] -> Int which returns the number of how many times the element is on the list. Ex. 6 isPrimeNumber :: Int -> Bool which returns True or False depending on whether the number given as the argument is the prime number or not the prime number. Then write the function nPrimeNumbers :: Int -> [Int] which returns the first n primes numbers. dr Robert Kowalczyk WMiI UŁ

19 Excercises without Teacher’s help
Define functions toUpperString and toLowerString which will convert each letter in a string to a large (small) one. For example: toUpperString ”Helooo Haskell” -> ”HELOOO HASKELL” toLowerString ”Hello Haskell” -> ”hello haskell” Hint. Import functions toUpper and toLower from the module Data.Char. Ex. 8 Write the program palindrom which reads any string from the keyboard and check (True or False) if this string is a palindrom or not. dr Robert Kowalczyk WMiI UŁ

20 dr Robert Kowalczyk WMiI UŁ
Sites about Haskell    dr Robert Kowalczyk WMiI UŁ

21 Thank you for your attention
dr Robert Kowalczyk WMiI UŁ


Download ppt "dr Robert Kowalczyk WMiI UŁ"

Similar presentations


Ads by Google