Έχουν δημοσιευτεί Παρασκευή, 20 Απριλίου 2007 11:46 μμ από το μέλος PALLADIN

Lazy Prime Numbers

Μια από τις πιο 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);
    }

Share


Ενημέρωση για Σχόλια

Αν θα θέλατε να λαμβάνετε ένα e-mail όταν γίνονται ανανεώσεις στο περιεχόμενο αυτής της δημοσίευσης, παρακαλούμε γίνετε συνδρομητής εδώ

Παραμείνετε ενήμεροι στα τελευταία σχόλια με την χρήση του αγαπημένου σας RSS Aggregator και συνδρομή στη Τροφοδοσία RSS με σχόλια

Σχόλια:

Χωρίς Σχόλια

Ποιά είναι η άποψή σας για την παραπάνω δημοσίευση;

(απαιτούμενο)
απαιτούμενο
προαιρετικό
απαιτούμενο
ÅéóÜãåôå ôïí êùäéêü:
CAPTCHA Image