
wenduan wrote:
Anybody could please tell me that in the following two expressions what value does the [] take?
foldl (/) 3 [] foldr (/) 3 []
when both of them are evaluated I got 3.0,but I thought I could get nothing out of there,cause its an empty list,does Haskell assume any default value for a empty list?
Those functions are defined as:
foldl :: (a -> b -> a) -> a -> [b] -> a
foldl f z [] = z
foldl f z (x:xs) = foldl f (f z x) xs
foldr :: (a -> b -> b) -> b -> [a] -> b
foldr f z [] = z
foldr f z (x:xs) = f x (foldr f z xs)
Note the base cases:
foldl f z [] = z
and:
foldr f z [] = z
If you want functions which fail on an empty list, use:
foldl1 :: (a -> a -> a) -> [a] -> a
foldl1 f (x:xs) = foldl f x xs
foldr1 :: (a -> a -> a) -> [a] -> a
foldr1 f [x] = x
foldr1 f (x:xs) = f x (foldr1 f xs)
--
Glynn Clements