<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>
	Comentarios en: El secreto de Ruby: Las «clausuras»	</title>
	<atom:link href="https://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/</link>
	<description>Todos los días se aprende algo viejo</description>
	<lastBuildDate>Sat, 10 Jul 2010 04:59:35 +0000</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>
		Por: Clausuras en Python &#124; Vientos de Libertad		</title>
		<link>https://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1607</link>

		<dc:creator><![CDATA[Clausuras en Python &#124; Vientos de Libertad]]></dc:creator>
		<pubDate>Sat, 10 Jul 2010 04:59:35 +0000</pubDate>
		<guid isPermaLink="false">http://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1607</guid>

					<description><![CDATA[[...] unos días leí este post en el blog de Javier Smaldone. Closures: Essentially a closure is a block of code that can be [...]]]></description>
			<content:encoded><![CDATA[<p>[&#8230;] unos días leí este post en el blog de Javier Smaldone. Closures: Essentially a closure is a block of code that can be [&#8230;]</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: melvinn		</title>
		<link>https://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1606</link>

		<dc:creator><![CDATA[melvinn]]></dc:creator>
		<pubDate>Fri, 13 Mar 2009 05:29:21 +0000</pubDate>
		<guid isPermaLink="false">http://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1606</guid>

					<description><![CDATA[como puedo sumar los elementos de dos listas que se ven de esta manera:
lista=[1,2,3,4,5]
lista2=[7,7,5,3,1]
donde la lista 3 sera el resultado de el primer elemento de la lista uno y el último de la lista 2, y el ultimo elemento de la lista uno con el primer elemento de la lista 2 quedando asi
list3[2,5,8,11,12] espero sus respuestas desde ya GRACIAS!!!!!!!!!!!!]]></description>
			<content:encoded><![CDATA[<p>como puedo sumar los elementos de dos listas que se ven de esta manera:<br />
lista=[1,2,3,4,5]<br />
lista2=[7,7,5,3,1]<br />
donde la lista 3 sera el resultado de el primer elemento de la lista uno y el último de la lista 2, y el ultimo elemento de la lista uno con el primer elemento de la lista 2 quedando asi<br />
list3[2,5,8,11,12] espero sus respuestas desde ya GRACIAS!!!!!!!!!!!!</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Rafa		</title>
		<link>https://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1605</link>

		<dc:creator><![CDATA[Rafa]]></dc:creator>
		<pubDate>Sun, 05 Aug 2007 23:00:20 +0000</pubDate>
		<guid isPermaLink="false">http://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1605</guid>

					<description><![CDATA[otra forma de resolver el problema 4 con ruby es la siguiente:

a.max {&#124;x,y&#124; x.length  y.length }]]></description>
			<content:encoded><![CDATA[<p>otra forma de resolver el problema 4 con ruby es la siguiente:</p>
<p>a.max {|x,y| x.length  y.length }</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Leonardo Bracco		</title>
		<link>https://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1604</link>

		<dc:creator><![CDATA[Leonardo Bracco]]></dc:creator>
		<pubDate>Sat, 30 Jun 2007 02:16:37 +0000</pubDate>
		<guid isPermaLink="false">http://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1604</guid>

					<description><![CDATA[Esta muy bueno, pero me quedo con Perl]]></description>
			<content:encoded><![CDATA[<p>Esta muy bueno, pero me quedo con Perl</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Juanjo		</title>
		<link>https://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1603</link>

		<dc:creator><![CDATA[Juanjo]]></dc:creator>
		<pubDate>Tue, 01 May 2007 17:39:46 +0000</pubDate>
		<guid isPermaLink="false">http://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1603</guid>

					<description><![CDATA[Ahora si vamos a intentar resolver el ejemplo 4 en Python:

Mmm inject está bueno para resolver ese problema.. pero creo que no tenemos algo así en Python. Intentemos de todas formas:

Tenemos una lista de strings:

a = [&quot;hola&quot;, &quot;juAnjO&quot;, &quot;Argentina&quot;, &quot;8&quot;]

Una función &#039;criterio&#039;:

def longer(a, b):
    if len(a) &#062; len(b):
        return a
    else:
        return b

And this magic functions called &#039;mas&#039;:

def mas(l, c, v):
    if l:
        return mas(l[1:], c, c(l[0], v))
    else:
        return v

Que nos va a permitir hacer algo como esto:

&#062;&#062;&#062; mas(a, longer, &quot;&quot;)
&#039;Argentina&#039;

Mirando desde más cerca.. esta función &#039;mas&#039;, es muy parecida a &#039;inject&#039;, salvo por el nombre :)

&#062;&#062;&#062; inject = mas
&#062;&#062;&#062; numeros = [1,2,3,4,5,6]
&#062;&#062;&#062; def suma(a, b):
	return a + b
&#062;&#062;&#062; inject(numeros, suma, 0)
21

Mmm parece que funciona, comprobemoslo:

&#062;&#062;&#062; sum(numeros)
21

Si! 

Nos leemos!]]></description>
			<content:encoded><![CDATA[<p>Ahora si vamos a intentar resolver el ejemplo 4 en Python:</p>
<p>Mmm inject está bueno para resolver ese problema.. pero creo que no tenemos algo así en Python. Intentemos de todas formas:</p>
<p>Tenemos una lista de strings:</p>
<p>a = [«hola», «juAnjO», «Argentina», «8»]</p>
<p>Una función &#8216;criterio&#8217;:</p>
<p>def longer(a, b):<br />
    if len(a) &gt; len(b):<br />
        return a<br />
    else:<br />
        return b</p>
<p>And this magic functions called &#8216;mas&#8217;:</p>
<p>def mas(l, c, v):<br />
    if l:<br />
        return mas(l[1:], c, c(l[0], v))<br />
    else:<br />
        return v</p>
<p>Que nos va a permitir hacer algo como esto:</p>
<p>&gt;&gt;&gt; mas(a, longer, «»)<br />
&#8216;Argentina&#8217;</p>
<p>Mirando desde más cerca.. esta función &#8216;mas&#8217;, es muy parecida a &#8216;inject&#8217;, salvo por el nombre :)</p>
<p>&gt;&gt;&gt; inject = mas<br />
&gt;&gt;&gt; numeros = [1,2,3,4,5,6]<br />
&gt;&gt;&gt; def suma(a, b):<br />
	return a + b<br />
&gt;&gt;&gt; inject(numeros, suma, 0)<br />
21</p>
<p>Mmm parece que funciona, comprobemoslo:</p>
<p>&gt;&gt;&gt; sum(numeros)<br />
21</p>
<p>Si! </p>
<p>Nos leemos!</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: javier		</title>
		<link>https://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1602</link>

		<dc:creator><![CDATA[javier]]></dc:creator>
		<pubDate>Tue, 01 May 2007 17:15:24 +0000</pubDate>
		<guid isPermaLink="false">http://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1602</guid>

					<description><![CDATA[Así es, Juanjo. Yo también me equivoqué. max, aplicado a strings devuelve el máximo según el orden lexicográfico, y no según la longitud.

Me sigue quedando la duda. ¿Hay algo similar a &#039;inject&#039; o &#039;fold&#039; en Python?]]></description>
			<content:encoded><![CDATA[<p>Así es, Juanjo. Yo también me equivoqué. max, aplicado a strings devuelve el máximo según el orden lexicográfico, y no según la longitud.</p>
<p>Me sigue quedando la duda. ¿Hay algo similar a &#8216;inject&#8217; o &#8216;fold&#8217; en Python?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Juanjo		</title>
		<link>https://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1601</link>

		<dc:creator><![CDATA[Juanjo]]></dc:creator>
		<pubDate>Tue, 01 May 2007 17:03:40 +0000</pubDate>
		<guid isPermaLink="false">http://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1601</guid>

					<description><![CDATA[Sorry, estando las minúsculas después que las mayúsculas.]]></description>
			<content:encoded><![CDATA[<p>Sorry, estando las minúsculas después que las mayúsculas.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Juanjo		</title>
		<link>https://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1600</link>

		<dc:creator><![CDATA[Juanjo]]></dc:creator>
		<pubDate>Tue, 01 May 2007 17:02:27 +0000</pubDate>
		<guid isPermaLink="false">http://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1600</guid>

					<description><![CDATA[Primero una aclaración de algo que me pasé por alto:  max(a) en Python cuando a es una lista de strings no da el string más largo sino el que está más al final en un ordenamiento creciente alfabético estando las minúsculas antes que las mayúsculas. Es así también en ruby?

&#062;&#062;&#062; max(&quot;hola&quot;, &quot;juanjo&quot;)
&#039;juanjo&#039;
&#062;&#062;&#062; max(&quot;hola&quot;, &quot;Juanjo&quot;)
&#039;hola&#039;
&#062;&#062;&#062; max(&quot;a&quot;, &quot;A&quot;)
&#039;a&#039;
&#062;&#062;&#062; max(&quot;a&quot;, &quot;AAAAAAAAAAAAAAAAAAAAAa&quot;)
&#039;a&#039;
&#062;&#062;&#062; max(&quot;a&quot;, &quot;AAAAAAAAAAAAAAAAAAAAA&quot;, &quot;a&quot;)
&#039;a&#039;
&#062;&#062;&#062; max(&quot;AAAAAAAAAAAAAAAAAAAAA&quot;, &quot;a&quot;)
&#039;a&#039;
&#062;&#062;&#062; max(&quot;b&quot;, &quot;a&quot;)
&#039;b&#039;
&#062;&#062;&#062; max(&quot;B&quot;, &quot;a&quot;)
&#039;a&#039;
]]></description>
			<content:encoded><![CDATA[<p>Primero una aclaración de algo que me pasé por alto:  max(a) en Python cuando a es una lista de strings no da el string más largo sino el que está más al final en un ordenamiento creciente alfabético estando las minúsculas antes que las mayúsculas. Es así también en ruby?</p>
<p>&gt;&gt;&gt; max(«hola», «juanjo»)<br />
&#8216;juanjo&#8217;<br />
&gt;&gt;&gt; max(«hola», «Juanjo»)<br />
&#8216;hola&#8217;<br />
&gt;&gt;&gt; max(«a», «A»)<br />
&#8216;a&#8217;<br />
&gt;&gt;&gt; max(«a», «AAAAAAAAAAAAAAAAAAAAAa»)<br />
&#8216;a&#8217;<br />
&gt;&gt;&gt; max(«a», «AAAAAAAAAAAAAAAAAAAAA», «a»)<br />
&#8216;a&#8217;<br />
&gt;&gt;&gt; max(«AAAAAAAAAAAAAAAAAAAAA», «a»)<br />
&#8216;a&#8217;<br />
&gt;&gt;&gt; max(«b», «a»)<br />
&#8216;b&#8217;<br />
&gt;&gt;&gt; max(«B», «a»)<br />
&#8216;a&#8217;</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: javier		</title>
		<link>https://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1599</link>

		<dc:creator><![CDATA[javier]]></dc:creator>
		<pubDate>Tue, 01 May 2007 16:34:19 +0000</pubDate>
		<guid isPermaLink="false">http://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1599</guid>

					<description><![CDATA[Muchas gracias Juanjo por las soluciones.

Con respecto al problema 4, un detalle:

En Ruby también puedes obtener el máximo elemento de un arreglo &#039;a&#039; usando

  a.max

Sin embargo, la idea era mostrar como aplicar una función al estilo del &#039;fold&#039; de los lenguajes funcionales. ¿Podrías reescribir la solución en esos términos?]]></description>
			<content:encoded><![CDATA[<p>Muchas gracias Juanjo por las soluciones.</p>
<p>Con respecto al problema 4, un detalle:</p>
<p>En Ruby también puedes obtener el máximo elemento de un arreglo &#8216;a&#8217; usando</p>
<p>  a.max</p>
<p>Sin embargo, la idea era mostrar como aplicar una función al estilo del &#8216;fold&#8217; de los lenguajes funcionales. ¿Podrías reescribir la solución en esos términos?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Juanjo		</title>
		<link>https://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1598</link>

		<dc:creator><![CDATA[Juanjo]]></dc:creator>
		<pubDate>Tue, 01 May 2007 13:22:50 +0000</pubDate>
		<guid isPermaLink="false">http://blog.smaldone.com.ar/2007/04/26/el-secreto-de-ruby-las-clausuras/#comment-1598</guid>

					<description><![CDATA[Las que siguen son soluciones en Python de los ejemplos que planteaste, algunas usan clausuras, otros puede que no :)

El ejemplo simple:


def f(a):
    return [2*x for x in a]


El ejemplo de people:


[p.name for p in people if p.age &#062; 18]


Problema 1:


a = [x.upper() for x in a]


Problema 2:


[&quot;, &quot;.join([y,x]) for [x,y] in a]


Problema 3:

Este no quedó tan bien como los otros, pero te dejo mi interacción en REPL de Python:


&#062;&#062;&#062; p1 = Persona()
&#062;&#062;&#062; p1.age = 19
&#062;&#062;&#062; p1.name = &quot;Juan Hewr&quot;
&#062;&#062;&#062; p2 = Persona()
&#062;&#062;&#062; p2.age = 2
&#062;&#062;&#062; p2.name = &quot;Baby Jones&quot;
&#062;&#062;&#062; p3 = Persona()
&#062;&#062;&#062; p3.age = 30
&#062;&#062;&#062; p3.name = &quot;Sussan Ahoria&quot;
&#062;&#062;&#062; people = [p1, p2, p3]

&#062;&#062;&#062; s = 0.0
&#062;&#062;&#062; adults = [p for p in people if p.age &#062; 18]
&#062;&#062;&#062; for p in adults:
	print p.name
	s += p.age
Juan Hewr
Sussan Ahoria
&#062;&#062;&#062; print s/len(adults)
24.5

Problema 4:


max(cadenas)
]]></description>
			<content:encoded><![CDATA[<p>Las que siguen son soluciones en Python de los ejemplos que planteaste, algunas usan clausuras, otros puede que no :)</p>
<p>El ejemplo simple:</p>
<p>def f(a):<br />
    return [2*x for x in a]</p>
<p>El ejemplo de people:</p>
<p>[p.name for p in people if p.age &gt; 18]</p>
<p>Problema 1:</p>
<p>a = [x.upper() for x in a]</p>
<p>Problema 2:</p>
<p>[«, «.join([y,x]) for [x,y] in a]</p>
<p>Problema 3:</p>
<p>Este no quedó tan bien como los otros, pero te dejo mi interacción en REPL de Python:</p>
<p>&gt;&gt;&gt; p1 = Persona()<br />
&gt;&gt;&gt; p1.age = 19<br />
&gt;&gt;&gt; p1.name = «Juan Hewr»<br />
&gt;&gt;&gt; p2 = Persona()<br />
&gt;&gt;&gt; p2.age = 2<br />
&gt;&gt;&gt; p2.name = «Baby Jones»<br />
&gt;&gt;&gt; p3 = Persona()<br />
&gt;&gt;&gt; p3.age = 30<br />
&gt;&gt;&gt; p3.name = «Sussan Ahoria»<br />
&gt;&gt;&gt; people = [p1, p2, p3]</p>
<p>&gt;&gt;&gt; s = 0.0<br />
&gt;&gt;&gt; adults = [p for p in people if p.age &gt; 18]<br />
&gt;&gt;&gt; for p in adults:<br />
	print p.name<br />
	s += p.age<br />
Juan Hewr<br />
Sussan Ahoria<br />
&gt;&gt;&gt; print s/len(adults)<br />
24.5</p>
<p>Problema 4:</p>
<p>max(cadenas)</p>
]]></content:encoded>
		
			</item>
	</channel>
</rss>
