SOE ex.5.5


doubleEach :: Num a => [a] -> [a]
doubleEach [] = []
doubleEach (x:xs) = (2*x) : doubleEach xs

doubleEach' :: Num a => [a] -> [a]
doubleEach' = map (2*)

pairAndOne :: Num a => [a] -> [(a,a)]
pairAndOne [] = []
pairAndOne (x:xs) = (x, x+1) : pairAndOne xs

pairAndOne' :: Num a => [a] -> [(a,a)]
pairAndOne' = map (\x -> (x, x+1))

addEachPair :: Num a => [(a,a)] -> [a]
addEachPair [] = []
addEachPair ((x, y):xs) = (x + y) : addEachPair xs

addEachPair' :: Num a => [(a,a)] -> [a]
addEachPair' = map (\(x,y) -> x+y)

-- Or using List Comprehension --
doubleEach''  xs = [ 2 * x   |   x   <- xs]
pairAndOne''  xs = [(x, x+1) |   x   <- xs]
addEachPair'' xs = [ x + y   | (x,y) <- xs]

Leave a Reply