-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchapter6.hs
70 lines (54 loc) · 1.22 KB
/
chapter6.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
63
64
65
66
67
68
69
fac :: Int -> Int
--factorial
fac 0 = 1
fac n = n * fac(n-1)
--product
product :: Num a => [a] -> a
product [] = 1
product (x:xs) = x * product xs
length :: [a] -> Int
length [] = 0
length (_:xs) = 1 + length xs
reverse :: [a] -> [a]
reverse [] = []
reverse (x:xs) = reverse xs ++ [x]
(++) :: [a] -> [a] -> [a]
[] ++ ys = ys
(x:xs) ++ ys = x : (xs ++ ys)
insert :: Ord a => a -> [a] -> [a]
insert z [] = [z]
insert z (x:xs) | z <= x = z:x:xs
| otherwise = x: insert z xs
isort :: Ord a => [a] -> [a]
isort [] = []
isort (x:xs) = insert x (isort xs)
zip :: [a] -> [b] -> [(a, b)]
zip [] _ = []
zip _ [] = []
zip (x:xs) (y:ys) = (x, y) : zip xs ys
drop :: Int -> [a] -> [a]
drop 0 xs = xs
drop n [] = []
drop n (_:xs) = drop (n-1) xs
fib 1 = 0
fib 2 = 1
fin n = fib (n-2) + fib (n-1)
quicksort [] = []
quicksort (x:xs) = quicksort [y | y <- xs, y <= x]
++ [x] ++
quicksort [y | y <- xs, y > x ]
even :: Int -> Bool
even 0 = True
even n = odd (n-1)
odd :: Int -> Bool
odd 0 = False
odd n = even (n-1)
evens :: [a] -> [a]
evens [] = []
evens (x:xs) = x: odds xs
odds :: [a] -> [a]
odds [] = []
odds (_:xs) = evens xs
init :: [a] -> [a]
init [_]= []
init (x:xs) = x : init xs