cube (cube 3)
map (1+) (map (2*) [1,2,3])
head ([1,2,3] ++ loop 1)
foldr (||) False (copy n True)
n (where n >= 0), what is
the time and space required for the expression using normal order
reduction?
foldr by foldl. What the time
and space required now?
foldr by foldl'. What the time
and space required now?
Function definitions:
cube :: Int -> Int
cube x = x * x * x -- cube
loop :: Int -> [a]
loop n = loop (n+1) -- loop
copy Int -> a - > [a]
copy 0 x = [] -- copy.1
copy n x | n > 0 = x : copy (n-1) x -- copy.2
(++) :: [a] -> [a] -> [a]
[] ++ ys = ys -- append.1
(x:xs) ++ ys = x:(xs ++ ys) -- append.2
map :: (a -> b) -> [a] -> [b]
map f [] = [] -- map.1
map f (x:xs) = f x : map f xs -- map.2
foldr :: (a -> b -> b) -> b -> [a] -> b
foldr f z [] = z -- foldr.1
foldr f z (x:xs) = f x (foldr f z xs) -- foldr.2
foldl :: (a -> b -> a) -> a -> [b] -> a
foldl f z [] = z -- foldl.1
foldl f z (x:xs) = foldl f (f z x) xs -- foldl.2
foldl' :: (a -> b -> a) -> a -> [b] -> a
foldl' f z [] = z -- foldl'.1
foldl' f z (x:xs) = strict (foldl' f) (f z x) xs -- foldl'.2
head :: [a] -> a
head (x:xs) = x
UP to CSCI 555 assignments document?