summ :: Num a => [a] -> a summ [] = 0 summ (x:xs) = x + summ xs summe :: [Int]->Int summe (x:xs)= summel (x:xs) 0 summel :: [Int]->Int->Int summel [] akk = akk summel (x:xs) akk = summel xs (x+akk) --sum2 :: Num a => [a] -> a -> a --sum2 [] akk = akk --sum2 (x:xs) akk = sum2 xs (akk+x) length' :: [a] -> Int length' [] = 0 length' (x:xs) = 1 + length' xs --length2 :: [Int] -> Int -> Int length1 :: [Int] -> Int length1 (x:xs) = length2 (x:xs) 0 length2 :: Num a => [b] -> a -> a length2 [] akk = akk length2 (x:xs) akk = length2 xs (akk+1) length3 :: [a] -> Int length3 xs = len xs 0 where len xs akk = if (null xs) then akk else len (tail xs) (1+akk) --fak :: Num a => a -> a fak :: Integer -> Integer fak 0 = 1 fak n = n * fak (n-1) fakul :: Num a => a -> a -> a fakul 1 a = a fakul n a = fakul (n-1) (a*n) --fac :: Int -> Int --fac n = facakk n 1 -- where facakk n acc = if n == 0 then acc else facakk (n-1) (n*acc) fac :: Num a => a -> a fac n = facc n 1 facc 0 p = p facc n p = facc (n-1) (n*p) fib :: Int -> Int fib 0 = 0 fib 1 = 1 fib n = fib (n-2) + fib (n-1) fibnumbers = [ fib n | n <- [0..] ] where fib n | n == 0 = 0 | n == 1 = 1 | otherwise = fib (n-1) + fib (n-2) fibakk = f (0,1) where f (a,b) = a : f (a+b,a) -- >sum (take 20 fibakk) --fibo a = fib 0 1 a --fib v n 0 = v --fib v n 1 = n --fib v n a = fib n(v+n)a rev' :: [a] -> [a] rev' [] = [] rev' (x:xs) = rev' xs ++ [x] reverse :: [a] -> [a] reverse = revakk [] revakk akk [] = akk revakk akk (x:xs) = revakk (x:akk) xs --reverse :: [a] -> [a] --reverse xs = aux xs [] -- where -- aux [] ys = ys -- aux (x:xs) ys = aux xs (x:ys)