-
Notifications
You must be signed in to change notification settings - Fork 0
/
lab4.hs
64 lines (50 loc) · 1.99 KB
/
lab4.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
module Lab4 where
--------------------------------------------------------------------------------
-- RECURSIVE FUNCTIONS
--------------------------------------------------------------------------------
import Data.Char
-- ===================================
-- Ex. 0 - 2
-- ===================================
triangle :: Integer -> Integer
triangle 0 = 0
triangle n = n + triangle (n - 1)
-- `n + k` pattern:
-- triangle (n + 1) = (n + 1) + triangle n
-- enable `XNPlusKPatterns` flag by typing into ghci:
-- :set -XNPlusKPatterns
-- ===================================
-- Ex. 3 - 4
-- ===================================
count :: Eq a => a -> [a] -> Int
count a [] = 0
count a (x : xs) = if a == x then 1 + (count a xs)
else count a xs
xs = [1,2,35,2,3,4,8,2,9,0,5,2,8,4,9,1,9,7,3,9,2,0,5,2,7,6,92,8,3,6,1,9,2,4,8,7,1,2,8,0,4,5,2,3,6,2,3,9,8,4,7,1,4,0,1,8,4,1,2,4,56,7,2,98,3,5,28,4,0,12,4,6,8,1,9,4,8,62,3,71,0,3,8,10,2,4,7,12,9,0,3,47,1,0,23,4,8,1,20,5,7,29,3,5,68,23,5,6,3,4,98,1,0,2,3,8,1]
ys = map (\x -> ((x + 1) * 3) ^ 3 - 7) xs
poem = [ "Three Types for the Lisp-kings under the parentheses,"
, "Seven for the Web-lords in their halls of XML,"
, "Nine for C Developers doomed to segfault,"
, "One for the Dark Lord on his dark throne"
, "In the Land of Haskell where the Monads lie."
, "One Type to rule them all, One Type to find them,"
, "One Type to bring them all and in the Lambda >>= them"
, "In the Land of Haskell where the Monads lie."
]
-- ===================================
-- Ex. 5 - 6
-- ===================================
euclid :: (Int, Int) -> Int
euclid (x, y) = case x `compare` y of
LT -> euclid (x, y - x)
GT -> euclid (x - y, y)
EQ -> x
-- ===================================
-- Ex. 7
-- ===================================
funkyMap :: (a -> b) -> (a -> b) -> [a] -> [b]
funkyMap f g xs = map h $ zip [0..] xs
where
h (i, x) = if i `mod` 2 == 0
then f x
else g x