On 19-7-2013 22:10, Pieter Koopman wrote:
Hi Erik,

there seems to be a problem with the generator.

Start = hd (drop n [1..n+10]) where n = 1000000

works fine. Hopefully John can explain this.

[1..] generates a list in the following way:

let
        gen_list n = [n : gen_list (n+1)]
in
        gen_list 1

Because gen_list is not strict in argument n,
a thunk is created for the expression (n+1) at runtime.
The first time this creates a thunk t0 with 1+1,
the next time a thunk t1 with t0+1, then t2 with
t1+1, ..
So after 1000000 elements, the heap contains 1000000
thunks.

The arguments of the function generated for [1..n+10] are strict,
because 1 is compared with n+10, so no increment thunks
are created.

On 7/19/13 4:41 PM, [email protected] wrote:
Re: [clean-list] Matrix operations
Start = hd (drop 1000000 [1..])
with standard heap (2M) leads to a heapfull message; not when I only
drop 1000.
I had expected the garbage collector to kick in so this would
effectively run in constant space
Any ideas?


_______________________________________________
clean-list mailing list
[email protected]
http://mailman.science.ru.nl/mailman/listinfo/clean-list




_______________________________________________
clean-list mailing list
[email protected]
http://mailman.science.ru.nl/mailman/listinfo/clean-list

_______________________________________________
clean-list mailing list
[email protected]
http://mailman.science.ru.nl/mailman/listinfo/clean-list

Reply via email to