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