<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">2013/9/17 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 class="im">-----BEGIN PGP SIGNED MESSAGE-----<br>
Hash: SHA1<br>
<br>
</div>On 17/09/2013 18:59, Piergiuliano Bossi wrote:<br>
> [...] Non e' particolarmente interessante focalizzarsi ne' su<br>
<div class="im">> map/reduce ne' sulle collezioni in generale.<br>
><br>
> Comunque, un altro esempio e' questo => puoi usare itertools.chain<br>
> per implementare una flatmap (sicuro che non vuoi il codice Python?<br>
> allora non leggere :) )<br>
><br>
<br>
</div>Non tutti conoscono Scala e sanno cosa fa flatmap.<br></blockquote><div><br></div><div>Beh, dai, e' comune a svariati linguaggi (eg: in Ruby e' facile da implementare). In pratica e' una map, seguita da una flatten, cosi' se la collezione risultante e' nestata la appiattisci. Vedi ad esempio <a href="http://stackoverflow.com/questions/1077015/python-list-comprehensions-compressing-a-list-of-lists">http://stackoverflow.com/questions/1077015/python-list-comprehensions-compressing-a-list-of-lists</a></div>
<div><br></div><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">Comunque se ho capito quello che fa:<br>
<br></blockquote><div><br></div><div>Hai decisamente capito. :)</div><div> </div><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">

##BEGIN##<br>
def flatmap(seq, fun):<br>
    for x in seq:<br>
        for y in fun(x):<br>
            yield y<br>
<br>
<br>
def foo(x):<br>
    return [x - 1, x, x + 1]<br>
<br>
<br>
print list(flatmap([1, 2, 3, 4, 5], foo))<br>
##END##<br>
<br>
La list alla fine serve a stampare correttamente la sequenza "lazy"<br></blockquote><div><br></div><div>Bello, mi piace molto, ma soffre lo stesso problema dell'uso di chain: lancia un'eccezione se la lista di partenza e' gia' "piatta".</div>
<div><br></div><div>>>> print list(flatmap([1, 2, 3, 4, 5], lambda x: x + 1))</div><div>Traceback (most recent call last):</div><div>  File "<stdin>", line 1, in <module></div><div>  File "<stdin>", line 3, in flatmap</div>
<div>TypeError: 'int' object is not iterable</div><div> </div><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">

(Python non │ Haskell).<br>
<br></blockquote><div><br></div><div>Potrebbe diventare la tua tagline ogni volta che mi scrivi un messaggio. ;)</div><div><br></div><div><div>Ciao,</div><div>Giuliano</div><div><br></div></div></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>