
Hi
I have already partially scanned the list looking for the first element that satisfies some condition, using a tail recursive search.
If such an element is found I want to split the list at that point.
span/break? I really can't believe the memory overhead of span is that terrible, you are only duplicating the (:)'s and its only one traversal.
As an aside, my version of this function would be:
neilGobbler :: Int -> [x] -> [x] neilGobbler n xs = length res `seq` res where res = take n xs
My guess is it will use O(1) stack and burn O(n) heap (in addition that actually used by the result), so assymptotic complexity wise same as heapGobbler, but probably higher constant factors with ghc due to lazy building of take thunks and subsequent reduction and indirection costs.
Sure? Guessing constant factors related to strictness and laziness is incredibly hard! My guess based on "gut feeling" is that the program will take less time, and use half the memory. But given my initial comment, that guess is not very reliable.
Yes, this is strange. Same thing happened in the "global variables" debate despite it being obvious to any thinking person that I was correct. Denial of the reality of some very simple examples of the problem was typical of that debate too.
The particular world I live in is special, but I like it :-) Thanks Neil