lab04b: init
This commit is contained in:
46
lab04/lab.lhs
Normal file
46
lab04/lab.lhs
Normal file
@@ -0,0 +1,46 @@
|
||||
> import Data.List
|
||||
|
||||
Experiment with foldl, foldr, and foldl'
|
||||
|
||||
First, implement your own version of the foldl function,
|
||||
defined as myFoldl
|
||||
|
||||
> myFoldl :: (a -> b -> a) -> a -> [b] -> a
|
||||
> myFoldl _ _ _ = error "TBD"
|
||||
|
||||
|
||||
Next, define a function to reverse a list using foldl.
|
||||
|
||||
> myReverse :: [a] -> [a]
|
||||
> myReverse _ = error "TBD"
|
||||
|
||||
|
||||
Now define your own version of foldr, named myFoldr
|
||||
|
||||
> myFoldr :: (a -> b -> b) -> b -> [a] -> b
|
||||
> myFoldr _ _ _ = error "TBD"
|
||||
|
||||
|
||||
Now try using foldl (the library version, not yours) to sum up the numbers of a large list.
|
||||
Why is it so slow?
|
||||
|
||||
Instead of foldl, try using foldl'.
|
||||
Why is it faster?
|
||||
(Read http://www.haskell.org/haskellwiki/Foldr_Foldl_Foldl%27 for some hints)
|
||||
|
||||
|
||||
For an extra challenge, try to implement foldl in terms of foldr.
|
||||
See http://www.haskell.org/haskellwiki/Foldl_as_foldr for details.
|
||||
|
||||
|
||||
Next, using the map function, convert every item in a list to its absolute value
|
||||
|
||||
> listAbs :: [Integer] -> [Integer]
|
||||
> listAbs _ = error "TBD"
|
||||
|
||||
Finally, write a function that takes a list of Integers and returns the sum of
|
||||
their absolute values.
|
||||
|
||||
> sumAbs :: [Integer] -> Integer
|
||||
> sumAbs _ = error "TBD"
|
||||
|
||||
Reference in New Issue
Block a user