{-
-} --dfs edges open closed dfs:: [(Int, Int)]->[Int]->[Int]->[Int] dfs _ [] _ = [] dfs edges (a:rest) closed = if (elem a rest) then (dfs edges ((nb a edges closed')++rest) closed') else a:(dfs edges ((nb a edges closed')++rest) closed') where closed'=[a]++closed nb _ [] _ = [] nb a ((x,y):xs) closed | a==x && not(elem y closed)= y: nb a xs closed | a==y && not(elem x closed)= x: nb a xs closed |otherwise = nb a xs closed {-Prohledavani grafu do sirky
-} --bfs edges open closed bfs:: [(Int, Int)]->[Int]->[Int]->[Int] bfs _ [] _ = [] bfs edges (a:rest) closed = if (elem a rest) then (bfs edges (rest++(nb a edges closed')) closed') else a:(bfs edges (rest++(nb a edges closed')) closed') where closed'=[a]++closed {-Nekonecne seznamy - jednicky, fibonacciho cisla, faktorial, mocniny dvou, mocniny n
-} ones = 1:ones fib = 1:1:addpairs (zip fib (tail fib)) where addpairs []=[] addpairs ((a,b):x)=(a+b):addpairs x fib' = 1:1:zipWith (+) fib' (tail fib') fibn n = fib !! (n-1) facts' = 1 : zipWith (*) facts' [2..] dvoj=1:map (*2) dvoj mocniny n = [n^x| x<-[0..]] moc n = iterate (*n) 1 -- iterate f x = x : iterate f (f x) -- je definovano v Prelude {-Prvocisla na ruzny zpusob
-} -- Prime numbers: Erasthmovo sito primes :: Integral a => [a] primes = map head (iterate sieve [2..]) sieve (p:xs) = [ x | x<-xs, x `mod` p /= 0 ] pr2 = si2 [2..] si2 (a:xs) = a: si2 [ x | x<-xs, x `mod` a /= 0 ] {-Delitele, perfektni cisla tj. rovne souctu svych delitelu
-} mfactors i = filter (\x -> i `mod` x == 0) [1..i] -- Perfect numbers: factors n = [ i | i<-[1..n-1], n `mod` i == 0 ] perfect n = sum (factors n) == n firstperfect = head perfects perfects = filter perfect [1..] {-Pascaluv trojuhelnik
-} pascal :: [[Int]] pascal = iterate (\row -> zipWith (+) ([0]++row) (row++[0])) [1] {-Doplneni oddelovacu tisicu -carek- do prirozeneho cisla zapsaneho jako seznam cifer
-} carky =reverse.dopln.reverse dopln::String->String dopln (a:b:c:d:rest)=a:b:c:',':dopln (d:rest) dopln x=x {-Member pro vzestupne usporadany seznam - vsimnete si podminky Ord t na typ
-} memberOrd :: Ord t => [t] -> t -> Bool memberOrd (m:x) n | mStrom a rovnost stromu -} data Tree a = Leaf a | Branch (Tree a) (Tree a) instance (Eq a)=>Eq (Tree a) where Leaf a == Leaf b = a==b (Branch l1 r1)==(Branch l2 r2) = (l1==l2) && (r1==r2) _ == _ = False --