[Haskell-beginners] Newbie performance question
Daniel Fischer
daniel.is.fischer at web.de
Sat Oct 16 16:44:33 EDT 2010
On Saturday 16 October 2010 08:18:39, Jordan Ellis wrote:
> I have a quick follow-up question: With optimization enabled, will a
> value be shared between recursive function calls? For example, in the
> following:
> myRecursiveFunction 0 m = []
> myRecursiveFunction n m = m : myRecursiveFunction (n - 1) m
> ...will 'm' be calculated 'n' times, or just once? Thanks.
Here, you don't have two equal expressions, the m refers to the same entity
in both appearances on the RHS. It's not guaranteed by the language
definition, but every decent implementation will evaluate m only once (all
occurrences are pointers to the same heap object, so you get n pointers,
but only one pointed-to value).
With or without optimisation.
That's of course bad if m is large and you need a large part of it once at
the beginning but only small parts afterwards, e.g.
mapM_ (print . length) $ zipWith take (iterate (`quot` 2) 20000000) $
myRec n [1 .. k]
To prevent that, if you don't want it, you have to jump through a couple of
hoops.
More information about the Beginners
mailing list