import Data.List gcd' a b = if a == b then a else if a > b then gcd' (a-b) b else gcd' a (b-a) fib n = if n < 1 then 1 else fib (n-1) + fib (n-2) fib' n = f n 0 1 where f 0 a b = b f n a b = f (n-1) b (a+b) fibs = fib' `map` [0..] lfibs = filter (\a -> mod a 2 == 1) fibs quicksort [] = [] quicksort (h:tail) = let smaller = quicksort $filter (=h) tail in smaller ++ [h] ++ bigger mergesort l = let ll = map (\a -> [a]) l merge :: Ord a => [a] -> [a] -> [a] merge [] [] = [] merge [] x = x merge x [] = x merge xx@(x:xs) yy@(y:ys) = if x < y then x:(merge xs yy) else y:(merge xx ys) glue [] = [] glue [a] = [a] glue (x:y:s) = merge x y:glue s ms [] = [] ms [a] = a ms a = ms(glue a) in ms ll secti l = foldr (+) 0 l fact 0 = 1 fact n = n * fact (n-1) fact' n = product [1..n] --cv8 rozdily s = zipWith (-) s (tail s) fs = [(+1), (*2), (* 10)] tails' s = take (length s) $ map ($ s) (map drop [0..]) rle s = let g = group s in zip (map head g) (map length g) lookup' e (x:xs) = let (x1,x2) = x in if e==x1 then Just x2 else lookup' e xs lookup' _ [] = Nothing fib'' = 0:1: zipWith (+) fib'' (tail fib'') primes = 2:3: filter isPrime [4..] where isPrime n = all (/= 0) $ map (mod n) $takeWhile (\i -> i * i <= n) primes data Complex = C Int Int deriving Show cMult:: Complex -> Complex -> Complex cMult (C ax ay) (C bx by) = C (ax*bx-ay*by) ( ay*bx + ax*by) data Tree a = Nil | Branch (Tree a) a (Tree a) deriving Show tInsert value Nil = Branch Nil value Nil tInsert value (Branch lt v rt) = if value > v then Branch lt v (tInsert value rt) else Branch (tInsert value lt) v rt tFind value Nil = False tFind value (Branch lt v rt) = if value == v then True else if value < v then tFind value lt else tFind value rt treeToList Nil = [] treeToList (Branch lt v rt) = treeToList lt++[v]++treeToList rt