Έχουν δημοσιευτεί
Σάββατο, 10 Νοεμβρίου 2007 7:48 μμ
από το μέλος
PALLADIN
Πολλές φορες, μέσα από την διαφορετικότητα μπορούμε να έχουμε μια ομορφότερη εικόνα για τον κόσμο...
Μέσα από την εκκεντρικότητα της 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."