CSE 130 Sample Solutions: Individual Assignment 4 -- PROBLEM 1 -- PART A and_list :: [Bool] -> Bool and_list = foldr (&&) True or_list :: [Bool] -> Bool or_list = foldr (||) False -- PART B len :: a -> Int -> Int len x y = y + 1 length' :: [a] -> Int length' x = foldr len 0 x -- PART C charcount :: Char -> [Char] -> Int charcount z l = foldr chrcnt 0 l where chrcnt :: Char -> Int -> Int chrcnt x y = if x==z then y+1 else y -- PROBLEM 2 -- PART A myfoldr :: (a -> a -> a) -> [a] -> a myfoldr f [] = error "ERROR: Can't use Myfoldr with empty List" myfoldr f [x] = x myfoldr f (x:xs) = f x (myfoldr f xs) myfoldl :: (a -> a -> a) -> [a] -> a myfoldl f [] = error "ERROR: Can't use Myfoldl with empty List" myfoldl f (x:xs) = foldl f x xs -- PART B min' :: Ord a => a -> a -> a min' x y = if x[a] -> a minlist [] = error "ERROR: Cannot find min of empty list" minlist x = myfoldl min' x max' :: Ord a => a -> a -> a max' x y = if x>y then x else y maxlist :: Ord a => [a] -> a maxlist [] = error "ERROR: cannot find max of empty list" maxlist x = myfoldl max' x