Cosa è la serendipità? Ne abbiamo già parlato; una delle “definizioni” più belle e significative che ho trovato è data in termini di una metafora:
Serendipity is looking in a haystack for a needle and discovering a farmer’s daughter.
— Julius Comroe Jr.
Nel mio caso, il pagliaio può essere un thread particolarmente fuffoso su PerlMonks; l’ago, un post non eccessivamente stupido su cui spendere uno dei miei voti quotidiani (sapete, durante il weekend è un po’ un mortorio…) e la figlia del fattore… un bellissimo post a sorpresa di Larry Wall a.k.a. TimToady, nello stesso thread fuffoso e noioso! Micacazzi!!
Il problema discusso era banale: quello di generare la successione 1, 11, 111... ed incline perciò a far partecipare ogni sorta di niubbi che si son sentiti autorizzati a fornire la loro “autorevole” soluzione, cioè, come spesso accade in tali casi, a passare informazioni se non proprio sbagliate, quanto meno inclini agli errori, mentre altri, più esperti, si sono divertiti a darne di “alternative” o fantasiose o in altro modo giocose, cioè perfettamente funzionanti ma non corrispondenti in alcun modo a ciò che uno farebbe nella cosidetta “vita reale” sempre che ne esista una! Ad un certo punto, qualcuno menziona Haskell, ed è a questo punto che $Larry interviene, col suo solito wit:
Tsk, tsk, Haskell is such a verbose language. :) In Perl 6 it’ just:
[\~] 1 xx *
where that just says “make an arbitrarily long list of 1’s and reduce them using concatenation (the ~ operator), returning partial results in a list.”
Ciò che ho imparato di nuovo, da questo post, è il metaoperatore, [\ ] variante di [ ], come mi è stato gentilmente spiegato. Ma non è finita qui! La novità più nuova è:
the new spiffily readable ... infix, it’s even shorter:
1...{$_~1}
That just extends the list on the left by concatenating a 1 onto the previous last value of the list.
Che dire? Fantastico!