<div dir="ltr">2013/9/18 enrico franchi <span dir="ltr"><<a href="mailto:enrico.franchi@gmail.com" target="_blank">enrico.franchi@gmail.com</a>></span><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote"><div class="im">2013/9/18 Manlio Perillo <span dir="ltr"><<a href="mailto:manlio.perillo@gmail.com" target="_blank">manlio.perillo@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><span style="color:rgb(34,34,34)">Peccato che flatten non sia disponibile in itertools, e non credo sia</span><br>
</div>
implementabile in modo elegante.<br>
<div><br></div></blockquote><div><br></div></div><div>Dipende cosa intendi con "elegante". A me questa non dispiace:</div><div><br></div></div></div></div></blockquote><div><br></div><div>Niente male, concordo.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div></div><div><div>import collections as c</div>
<div><br></div><div>def flatten(obj):</div>
<div> """</div><div> >>> list(flatten(1))</div><div> [1]</div><div> >>> list(flatten([1, 2, 3]))</div><div> [1, 2, 3]</div><div> >>> list(flatten([1, [2, 3], [4, 5], 6]))</div>
<div> [1, 2, 3, 4, 5, 6]</div><div> """</div><div> stack = [obj]</div><div> while stack:</div><div> current = stack.pop()</div><div> if isinstance(current, c.Sequence):</div><div>
stack.extend(reversed(current))</div>
<div> else:</div><div> yield current</div><div><br></div><div><br></div><div>if __name__ == '__main__':</div><div> import doctest</div><div> doctest.testmod()</div></div><div><br></div><div>
Facilmente adattabile per una flatmap alla ruby. Non e testata molto (come si puo' vedere), ma sembra ragionevole.</div><div><br></div><div>Si, avrei potuto usare ricorsione esplicita invece dello stack, ma poi si sarebbe complicata la gestione del generatore, temo.</div>
<div>Poi possiamo girarci intorno: Python supporta alcuni costrutti funzionali ma quello che e' e rimane e' un linguaggio *imperativo* ad oggetti.</div><div>In pratica le parti veramente funzionali di python girano intorno ad itertools e functools e a poche features del core (LC). </div>
<div><br></div><div>Insomma, Python e' un linguaggio che *sceglie* di avere degli statement e non di essere tutto un'espressione. Vorra' pur dire qualcosa.</div><span class="HOEnZb"><font color="#888888"><div>
<br></div></font></span></div></div></div></blockquote><div><br></div><div>Non so se c'e' un messaggio nella bottiglia, comunque a me personalmente interessano i modelli misti FP+OO (in nessun ordine particolare), non quelli puri.</div>
<div><br></div><div>Ciao</div><div>Giuliano</div></div><br><br clear="all"><div><br></div>-- <br>Piergiuliano Bossi<br>Blog: <a href="http://thinkingbox.wordpress.com/" target="_blank">http://thinkingbox.wordpress.com/</a><br>
Twitter: <a href="http://twitter.com/thinkingbox" target="_blank">http://twitter.com/thinkingbox</a> (English)<br>Twitter: <a href="http://twitter.com/scatolapensante" target="_blank">http://twitter.com/scatolapensante</a> (Italiano)<br>
<div>Google+: <a href="https://plus.google.com/u/0/108187981162465525118" target="_blank">https://plus.google.com/u/0/108187981162465525118</a></div>
</div></div>