|
Memory usage: msg#00071lang.haskell.general
Hello, working on a small utility for de/compression of special files using special algorithm (useless in other cases and not important for the problem) I've encountered I cannot decompress even small files because I always run out of the memory. After some time I've found the problem. It can be simplified to the following function (computing nothing reasonable): tst l [] = id tst l (x:xs) = if null l then ((++) [x]) . (tst (l++[x]) xs) else if null (tail l) then ((++) [x,last l]) . (tst (tail l++[last l]++[x]) xs) else ((++) [x,last l]) . (tst (tail (tail l)++[last l]++[x]) xs) Trying to run it in hugs (default settings) this way: tst [] [1..20000] [] the program stops writing almost all the lines and running out of memory. Nevertheless, just a minor change to the function ([last l] replaced with [x]): tst' l [] = id tst' l (x:xs) = if null l then ((++) [x]) . (tst' (l++[x]) xs) else if null (tail l) then ((++) [x,last l]) . (tst' (tail l++[x]) xs) else ((++) [x,last l]) . (tst' (tail (tail l)++[x]++[x]) xs)tst' l [] = id and we can run the: tst' [] [1..1000000] [] easily, till it writes out the complete list. Could you point me somewhere to see where is the error and how it can be solved? Thanx Dusan Kolar |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Release: Mondrian and Haskell for .NET: 00071, Nigel Perry |
|---|---|
| Next by Date: | Re: Parser Combinators in C: 00071, Jan Skibinski |
| Previous by Thread: | Release: Mondrian and Haskell for .NETi: 00071, Nigel Perry |
| Next by Thread: | Re: Memory usage: 00071, William Marsh |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |