Έχουν δημοσιευτεί
Παρασκευή, 20 Απριλίου 2007 11:46 μμ
από το μέλος
PALLADIN
Μια από τις πιο cool ιδιότητες των iterators στην C# είναι ότι μπορούμε να δημιουργήσουμε infinite streams of values. Σε μια συζήτηση που είχα με τον Wes Dyer περί infinite streams, μου έστειλε ένα πολύ ενδιαφέρον κομμάτι κώδικα που υλοποιεί ένα lazy stream από πρώτους αριθμούς.
Ο Wes χρησιμοποιεί μια "lazy" παραλλαγή του κλασσικού αλγοριθμου "το κόσκινο του Ερατοσθένη".
Ο κώδικάς του είναι απλά mind blowing... Simple & Elegant...
Χαρείτε τον...
static IEnumerable<int> ToInfinity(this int i)
{
while (true)
yield return i++;
}
static IEnumerable<int> Sieve(this IEnumerable<int> e)
{
var first = e.First();
yield return first;
foreach (var item in Sieve(e.Skip(1).Where(x => x % first != 0)))
yield return item;
}
static void Main(string[] args)
{
foreach(var prime in 2.ToInfinity().Sieve())
Console.WriteLine(prime);
}