fac 0 = 1 fac n = n * fac (n - 1) summ [] = 0 summ (l:z) = l + summ z foldll _ a [] = a foldll f a (l:b) = let na = f a l in foldll f na b summ2 = foldll (+) 0 -- qs::[Int] -> [Int] qs [] = [] qs (pivot:zb) = let mensi = filter (< pivot) zb vetsi = filter (>= pivot) zb in qs mensi ++ [pivot] ++ qs vetsi ms:: [Int] -> [Int] ms [] = [] ms s = let ss = map (\ a->[a]) s reduce [a]= [a] reduce [] = [] reduce (h1:(h2:t)) = merge h1 h2 : reduce t mreduce [a] = a mreduce s = mreduce $ reduce s merge [] s = s merge s [] = s merge (h1:t1) (h2:t2) = if h1 < h2 then h1:merge t1 (h2:t2) else h2:merge (h1:t1) t2 in mreduce ss f a = f [a] main = do putStrLn (show ( ms [5,1,4,2,3] ))