
On Friday 01 February 2013, 13:43:59, Andres Löh wrote:
Right, I'm not arguing that it's impossible to produce a difference, but I think that if you're defining the sequence of fibs, the most likely scenario might be that you're actually interested in a prefix,
Right. If you only want one Fibonacci number with a not too small index, you should use a dedicated algorithm. I was just providing a possible answer to
Am I overlooking anything? What's your test?
to show how the desire for zipWith' might arise from the fibs example.
and more importantly, you can still, from the outside, force the prefix even if you're only interested in a particular element. The second point, imho, is what makes zipWith inherently different from a function such as foldl'.
Right, and as I said in my first post, the fibs example is more of a scan than a zip. And for scans it's natural to consume the list in order [if you only want one element, a fold is the proper function].
You can equivalently define zipWith' as a wrapper around zipWith:
zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c] zipWith' f xs ys = strictify (zipWith f xs ys) where strictify :: [a] -> [a] strictify [] = [] strictify (x : xs) = x `seq` x : strictify xs
You cannot easily do the same for foldl and foldl'.
I don't even see how one could do it non-easily. Cheers, Daniel