Proposed new syntax

Paul Rubin no.email at nospam.invalid
Mon Aug 14 23:26:12 EDT 2017


Steve D'Aprano <steve+python at pearwood.info> writes:
> It's quite clever, actually, in that it gives *pseudo* random-access
> with lazy evaluation. You can evaluate the Nth element without
> evaluating the earlier ones. But you can't do so without *storing* the
> previous ones, they have to be allocated, with only the actual
> evaluation being delayed.

Look at any of the memoization packages for ways around that. Or of
course you could just write a function instead of a list...
> In Haskell, you cannot get the last N elements of a list without
> allocating memory for the previous ones.

 lastn n xxs@(x:xs)
 | length (take n xs) == n-1 = xxs
 | otherwise = lastn n xs
 main = print . lastn 5 $ [1..10000000]
 *Main> main
 [9999996,9999997,9999998,9999999,10000000]
works for me. The 10000000 list nodes all get allocated, but are
immediately freed, so only 5 cells have to be in memory at a time. In
principle a fancy enough compiler optimization could get rid of all the
allocation completely.


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /