<div dir="ltr">2013/9/17 Piergiuliano Bossi <span dir="ltr"><<a href="mailto:pgbossi@gmail.com" target="_blank">pgbossi@gmail.com</a>></span><br><div class="gmail_extra"><div class="gmail_quote"><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 dir="ltr">Esempio 1<div>I lambda in python sono verbosi e visto che i vari map, reduce, filter, ... non sono metodi della collezione, si compongono in modo che io percepisco come innaturale.</div><div>Ad esempio, diciamo che abbiamo un array di interi e vogliamo somarne i cubi.</div>


<div><br></div><div>Ruby:</div><div><span style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">>> a = [1, 7, 22, 3]</span><br style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">


<span style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">=> [1, 7, 22, 3]</span><br style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">


<span style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">>> a.map{|x| x*x*x }.reduce{|sum, x| sum + x}</span><br style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">


<span style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">=> 11019</span><br></div><div><span style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)"><br>


</span></div><div>Scala:</div><div><span style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">scala> val a = Array(1, 7, 22, 3)</span><br style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">


<span style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">a: Array[Int] = Array(1, 7, 22, 3)</span><br style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">


<br style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)"><span style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">scala> a.map(x => x*x*x).reduce((sum, x) => sum+x)</span><br style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">


<span style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">res1: Int = 11019</span><br></div><div><span style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)"><br>


</span></div><div>Python:</div><div><span style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">>>> a = [1, 7, 22, 3]</span><br style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">


<span style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">>>> reduce(lambda sum, x: sum+x, map(lambda x: x*x*x, a))</span><br style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">


<span style="color:rgb(64,64,64);font-family:Roboto,arial,sans-serif;font-size:13px;line-height:18px;background-color:rgb(248,248,248)">11019</span><br></div><div><br></div><div>Rendo l'idea? Python non solo e' il piu' verboso (perche' devi ripetere "lambda"), ma non ti consente di comporre i metodi naturalmente (in questo python e' piu' FP-oriented degli altri, ma faccio piu' fatica a leggerlo, immaginatevi di comporre 4 o 5 manipolazioni o piu', che e' una cosa che si fa abbastanza naturalmente in Scala o Ruby (o Smalltalk, che poi e' il precursore di questo stile).</div>

</div></blockquote><div><br></div><div>Secondo me non hai ancora conosciuto le list-comprehension:</div><div><br></div><div><div>>>> a = [1, 7, 22, 3]</div><div>>>> sum(x**3 for x in a)</div><div>11019</div>

</div><div><br></div><div>Beat that :-)</div><div><br></div><div>Ciao.</div><div>Marco.</div><div><br></div></div>-- <br><div><div><div><div><a href="http://beri.it/" target="_blank">http://beri.it/</a> - Un blog</div><div>

<a href="http://beri.it/i-miei-libri/" target="_blank">http://beri.it/i-miei-libri/</a> - Qualche libro</div><div><br></div></div></div></div>
</div></div>