-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfuncs.hs
62 lines (48 loc) · 1.51 KB
/
funcs.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
reverse' :: [a] -> [a]
reverse' [] = []
reverse' (x:xs) = reverse' xs ++ [x]
fibonacci :: Integer -> Integer
fibonacci n | n == 0 = 0
| n == 1 = 1
| n >= 2 = fibonacci2(n-2) + fibonacci2(n-1)
| otherwise = error "arg must be >=0"
fibonacci2 :: Integer -> Integer
fibonacci2 n | n == 0 = 0
| n == 1 = 1
| n < 0 = fibonacci2(n+2) - fibonacci2(n+1)
| n >= 2 = fibonacci2(n-2) + fibonacci2(n-1)
f :: [Int] -> [Int]
f (_:x:xs) = x : f xs
f _ = []
rev [] = []
rev (h:t) = rev t ++ [h]
revNum :: Int -> String
revNum n | n < 10 = show n
| otherwise = show (n `mod` 10) ++ revNum (n `div` 10)
sumOddElems arr = sum (filter odd arr)
len :: [a] -> Int
len lst = length lst
leng :: [a] -> Int
leng [] = 0
leng (x:xs) = 1 + leng xs
zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c]
zipWith' _ [] _ = []
zipWith' _ _ [] = []
zipWith' f (x:xs) (y:ys) = f x y : zipWith' f xs ys
flip' :: (a -> b -> c) -> (b -> a -> c)
flip' f = g
where g x y = f y x
map' :: (a -> b) -> [a] -> [b]
map' _ [] = []
map' f (x:xs) = f x : map f xs
filter' :: (a -> Bool) -> [a] -> [a]
filter' _ [] = []
filter' p (x : xs)
| p x = x : filter p xs
| otherwise = filter p xs
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x : xs) =
let smaller = quicksort (filter (<=x) xs)
bigger = quicksort (filter (> x) xs)
in smaller ++ [x] ++ bigger