{-

Prohledavani grafu do hloubky

-}
--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 --