Έχουν δημοσιευτεί
Κυριακή, 17 Φεβρουαρίου 2008 3:44 μμ
από το μέλος
PALLADIN
Στο 12o Dotnetzone event, παρουσίασα μια βιβλιοθήκη για pattern matching με regular expressions... To διαφορετικό είναι ότι δεν περιορίζεται μονο σε character streams, αλλα κάνει match <T> streams, όπου το <T> οτιδήποτε (polymorphic type value).
Ένα κλασικό παράδειγμα είναι να κάνω pattern matching σε ένα bitstream που μου έρχεται από διαφορα files...
Stream: 1110101111110000111111000111
pattern: 1110(0|1)0111
Result: 1110101111110000111111000111
ή να βρω κάποιο συγκεκριμένο pattern στα δεκαδικά ψηφία του π (3.14159265358979323846264338327950288419716939937510...)
Κάποια παραδείγματα χρήσης
var pattern = true.Seq(true).Seq(false);
var matchPattern = pattern.Match(new[] { true, true, true, false});
var pattern = 1.Seq(2).Seq(3.Alt(4));
var matchPattern = pattern.Match(new[] { 1, 2, 3, 5});
var pattern = '1'.Seq('2').Seq('3'.Plus()).Seq('4');
var matchPattern = pattern.Match("12333345");
Κάποιες βασικές ιδέες που χρησιμοποίησα στην υλοποίηση
1. Internal DSL for patterns
2. parser combinators for patterns and execution
3. Infinite Lists (Wizard book-Streams)
Όσοι φίλοι μελετήσουν τον κώδικα, θα δουν πως μπορούμε να κάνουμε higher order functional programming με την C# 3.0 και να δομήσουμε τον κώδικα (και την σκέψη μας) με έναν αρκετά διαφορετικό τρόπο...purity + unit tests == zero debugging time