http://d.puremagic.com/issues/show_bug.cgi?id=5645
Summary: std.range.drop(), std.range.slice() Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: Phobos AssignedTo: nob...@puremagic.com ReportedBy: bearophile_h...@eml.cc --- Comment #0 from bearophile_h...@eml.cc 2011-02-23 04:30:40 PST --- std.range may find useful a function named "drop", to skip the first n items of a lazy iterable (it may call popFrontN if present, or empty/popFront otherwise). Example: it allows to take the nth item of a lazy iterable: import std.stdio, std.array, std.range; void main() { auto fib = recurrence!("a[n-1] + a[n-2]")(1, 1); writeln(drop(fib, 9).front); } Instead of using something worse like: import std.stdio, std.array, std.range; void main() { auto fib = recurrence!("a[n-1] + a[n-2]")(1, 1); writeln(array(take(fib, 10)).back); } "drop" is present in Haskell too: http://www.cse.unsw.edu.au/~en1000/haskell/inbuilt.html#take (Haskell also has this syntax: list !! n to take exactly the n-th item of a lazy list.) In Python, module itertools, there is also a quite useful lazy slicing function named islice(), that's more general than drop(): http://docs.python.org/library/itertools.html#itertools.islice >>> from itertools import islice >>> r = (x*x for x in xrange(10)) # lazy >>> list(islice(r, 5, 8)) [25, 36, 49] -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------