Έχουν δημοσιευτεί Σάββατο, 10 Νοεμβρίου 2007 7:48 μμ από το μέλος PALLADIN

Beautiful Code in Haskell => C#

Πολλές φορες, μέσα από την διαφορετικότητα μπορούμε να έχουμε μια ομορφότερη εικόνα για τον κόσμο...

Μέσα από την εκκεντρικότητα της pure & lazy Haskell, μπορούμε να δώσουμε εντυπωσιακές λύσεις σε δύσκολα προβλήματα.

Ένα κλασικό παράδειγμα είναι οι αριθμοί Hamming σε Haskell...
hamming = 1 : merge (map (2*) hamming) (merge (map (3*) hamming) (map (5*) hamming))

Clean, simple and elegant... Η ιδέα των infinite lists είναι γοητευτική, και σε συνδυασμό με την Haskell το αποτέλεσμα είναι αισθητικά άψογο.

Επειδή όμως δύσκολα θα γίνει mainstream η Haskell, ας δοκιμάσω να μεταφέρω κάποιες από αυτές τις ιδέες στην C#...
Μετά από πειραματισμό με κάποιες τεχνικές, κατέληξα σε αυτόν τον κώδικα...

public static IEnumerable<int> Hamming()
{
   yield return 1;
   var merge = Merge(Hamming().Select(n => n * 2),
                        Merge(Hamming().Select(n => n * 3), Hamming().Select(n => n * 5)));
   foreach(var number in merge)
      yield return number;
}

Το αποτέλεσμα με ικανοποιεί, και είναι "σχετικά" κοντά στην φιλοσοφία της Haskell

Happy coding

Edsger W. Dijkstra
"Elegance has the disadvantage that hard work is needed to achieve it and a good education to appreciate it."

Share


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

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

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

Σχόλια:

 

γιωργος μπακογιαννης έγραψε:

Νίκος + LINKQ = Magic!

Νοεμβρίου 11, 2007 6:23 πμ
 

PALLADIN έγραψε:

Σε ευχαριστώ φιλε Γιώργο.

Η μαγεία βρίσκεται στα θεμέλια αυτής της οντότητας, που ονομάζουμε γενικά ως "computation". Εκεί πρέπει να ψάξουμε, αν θέλουμε να βρούμε μαγικά spells, για να μας βοηθήσουν να γράψουμε καλύτερο software.

Νοεμβρίου 11, 2007 12:18 μμ

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

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