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 <[EMAIL PROTECTED]>
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to