haskell - Data.List.iterate lazy evaluation not happening -
i'm having above function, when call it, gets stuck, data.list.iterate evaluates without stopping.
rp:: randomgen g => g -> ([int], g) rp g = (map (\x -> (last (fst x))) lst , snd (next g)) lst = (data.list.iterate id ([1], g_second)) (g_first, g_second) = (split g) why happend?
thank you!
while i'm not sure you're trying achieve function, reason doesn't stop because you're mapping on infinite list , giving no reason to stop.
the infinite list originates in use of iterate:
lst = (data.list.iterate id ([1], g_second))
what you've done there create infinite list contains infinite number of tuple value ([1], g_second). seems logic error - list of tuple has no variation; every element same, infinity. clear, list building looks this:
[([1], g_second), ([1], g_second), ([1], g_second), ([1], g_second)...] g_second unchanging , never gets reason evaluate, is, in essence, discarded.
if use take or takewhile, force infinite list stop , return known number of elements. however, using map in statement:
map (\x -> (last (fst x))) lst all doing pulling value 1 out of tuple , repeating forever.
and since discard g_second , never use g_first, function equivalent following:
rp :: randomgen g => g -> ([int], g) rp g = (repeat 1 , snd (next g))
Comments
Post a Comment