<?xml version="1.0"?>
<rss version="2.0">
   <channel>
      <title>Funciones de orden superior by Danilo Mendoza</title>
      <link>https://padlet.com/odmendoza/6mjqdlcy7u3awo3u</link>
      <description>Programación funcional y reactiva</description>
      <language>en-us</language>
      <pubDate>2020-10-30 20:41:21 UTC</pubDate>
      <lastBuildDate>2020-11-05 18:04:46 UTC</lastBuildDate>
      <webMaster>hello@padlet.com</webMaster>
      <image>
         <url>https://padlet.net/icons/png/1f468-1f4bb.png</url>
      </image>
      <item>
         <title>Sobre la Programación Funcional</title>
         <author>odmendoza</author>
         <link>https://padlet.com/odmendoza/6mjqdlcy7u3awo3u/wish/892377438</link>
         <description><![CDATA[<div>La programación funcional es un estilo de programación que enfatiza la escritura de aplicaciones usando solo funciones puras y valores inmutables. Como escribió Alvin Alexander en <a href="https://alvinalexander.com/scala/functional-programming-simplified-book"><strong><em>Programación funcional simplificada</em></strong></a>, en lugar de usar esa descripción, puede ser útil decir que los programadores funcionales tienen un deseo extremadamente fuerte de ver su código como matemático: ver la combinación de sus funciones como una serie de ecuaciones algebraicas. En ese sentido, se podría decir que a los programadores funcionales les gusta pensar en sí mismos como matemáticos. Ese es el deseo que los impulsa a usar solo funciones puras y valores inmutables, porque eso es lo que se usa en álgebra y otras formas de matemáticas.</div><div><br></div><pre><blockquote>Tomado de https://docs.scala-lang.org/overviews/scala-book/functional-programming.html</blockquote></pre><div><br></div>]]></description>
         <enclosure url="" />
         <pubDate>2020-11-05 01:19:27 UTC</pubDate>
         <guid>https://padlet.com/odmendoza/6mjqdlcy7u3awo3u/wish/892377438</guid>
      </item>
      <item>
         <title>Qué son las Funciones de Orden Superior</title>
         <author>odmendoza</author>
         <link>https://padlet.com/odmendoza/6mjqdlcy7u3awo3u/wish/892410205</link>
         <description><![CDATA[<div>Hay funciones que pueden tomar  funciones como parámetros y devolver funciones como resultado. Las funciones que hacen ambas cosas o alguna de ellas se conocen como <strong>funciones de orden superior.</strong></div><div>Son una forma muy potente de resolver problemas y de pensar los programas que codificamos.<br><br>Se diferencias de las funciones de primer orden en que éstas actúan sobre tipos de datos simples pero no sobre otras funciones.</div>]]></description>
         <enclosure url="" />
         <pubDate>2020-11-05 01:36:24 UTC</pubDate>
         <guid>https://padlet.com/odmendoza/6mjqdlcy7u3awo3u/wish/892410205</guid>
      </item>
      <item>
         <title>Ejemplos</title>
         <author>odmendoza</author>
         <link>https://padlet.com/odmendoza/6mjqdlcy7u3awo3u/wish/894242091</link>
         <description><![CDATA[<div>Supongamos que queremos obtener la suma de todos los valores comprendidos entre <strong>a</strong> y <strong>b</strong>. Podríamos escribir la función:<br><br></div><pre>def sumBetween(a:Int, b:Int): Int = 
   if (a &gt; b) 0
   else a + sumBetween(a + 1, b)</pre><div><br></div><div>En este ejemplo, sumBetween, toma los límites <strong>a</strong> y <strong>b</strong> como parámetros. Entonces miramos, si <strong>a</strong> es mayor que <strong>b</strong> no hay nada que sumar. Devolveríamos, pues, el único valor lógico en </div><div>este caso, cero. En caso contrario, devolveríamos a más la </div><div>llamada recursiva a sumBetween con<strong> a + 1</strong> y <strong>b</strong>.<br>Este es un ejemplo de función de orden superior porque cumple al menos una condición para serlo, a saber, que devuelve una función como resultado.<br><br>Bien, ahora vamos a aumentar la dificultad y vamos a suponer que queremos sumar los cuadrados de los enteros entre <strong>a</strong> y <strong>b</strong>. A continuación tenemos la función:</div><pre>def square(x: Int): Int = x * x</pre><div>Esta función toma como parámetro un número y devuelve su cuadrado.<br>Ahora, así se vería la función para sumar los cuadrados:<br><br></div><pre>def sumSqrBetween(a:Int, b:Int): Int = 
   if (a &gt; b) 0
   else square(a) + sumSqrBetween(a + 1, b)</pre><div><br></div><div>La lógica es igual al ejemplo anterior, la función toma los valores límites a y b como parámetros. Compara si <strong>a</strong> es mayor a <strong>b </strong>y en ese caso devuelve <strong>0</strong>, porque no hay nada que sumar. Y, en caso contrario devuelve el cuadrado de a más una llamada recursiva a sí mismo con <strong>a + 1</strong> y <strong>b</strong>.<br>Y, como en en ejemplo anterior, también se trata de una función de orden superior porque devuelve como resultado una función.</div>]]></description>
         <enclosure url="" />
         <pubDate>2020-11-05 14:56:03 UTC</pubDate>
         <guid>https://padlet.com/odmendoza/6mjqdlcy7u3awo3u/wish/894242091</guid>
      </item>
      <item>
         <title>Para practicar</title>
         <author>odmendoza</author>
         <link>https://padlet.com/odmendoza/6mjqdlcy7u3awo3u/wish/894380806</link>
         <description><![CDATA[<div>Obtener la suma de los factoriales de todos los valores comprendidos entre <strong>a</strong> y <strong>b</strong>.</div>]]></description>
         <enclosure url="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjc4MjZ9" />
         <pubDate>2020-11-05 15:23:25 UTC</pubDate>
         <guid>https://padlet.com/odmendoza/6mjqdlcy7u3awo3u/wish/894380806</guid>
      </item>
      <item>
         <title>Más ejemplos</title>
         <author>odmendoza</author>
         <link>https://padlet.com/odmendoza/6mjqdlcy7u3awo3u/wish/894482458</link>
         <description><![CDATA[<div>Bien, por último, vamos a escribir una función en donde recibamos como parámetro una función y devolvamos también como resultado otra función.<br>Supongamos que queremos obtener la suma de todos los valores comprendidos entre <strong>a</strong> y <strong>b</strong>, o de los cuadrados de los valores comprendidos entre <strong>a</strong> y <strong>b</strong>, o factoriales de los valores comprendidos entre a y b; todo en una sola función. Pues bien, para ello resulta muy potente usar funciones de orden superior. ¡Vamos a verlo!<br>Primero escribiremos tres funciones, una que nos devuelvan el mismo valor (para cuando queramos hacer una suma simple), otra el cuadrado de un número y otra el factorial de un valor.<br><br></div><pre>def identical(x: Int): Int = x
def square(x: Int): Int = x * x
def factorial(x: Int): Int =
   if (x == 0) 1  
   else x * factorial(x-1)
<br></pre><div>Ahora vamos a definir la función que recibe como parámetro una función, cualquiera de las que acabamos de crear, y los valores límites <strong>a</strong> y <strong>b</strong>.<br><br></div><pre>def sum(f: Int =&gt; Int, a:Int, b:Int): Int = 
   if (a &gt; b) 0
   else f(a) + sum(f, a+1, b)</pre><div><br>La función compara si <strong>a</strong> es mayor a <strong>b</strong> y en ese caso decuelve <strong>0</strong>, porque la suma no puede hacerse. Caso contrario devuelve la llamada a la función correspondiente (identical, square o factorial) más la llamada recursiva a sí misma con los parámetros de la función en cuestión, <strong>a + 1</strong> y <strong>b</strong>.<br>Así, por ejemplo podemos obtener la suma de los factoriales comprendidos entre 4 y 10.</div><pre>scala&gt; sum(factorial, 4, 10)
val res6: Int = 4037904</pre><div>Ahora, si no queremos pasar directamente la función nosotros, podemos hacer otras funciones que lo hagan por nosotros, así:<br><br></div><pre>def sumInts(a: Int, b: Int): Int = sum(identical, a, b)
def sumSqr(a: Int, b: Int): Int = sum(square, a, b)
def sumFact(a: Int, b: Int): Int = sum(factorial, a, b)</pre>]]></description>
         <enclosure url="" />
         <pubDate>2020-11-05 15:43:07 UTC</pubDate>
         <guid>https://padlet.com/odmendoza/6mjqdlcy7u3awo3u/wish/894482458</guid>
      </item>
      <item>
         <title>Tip</title>
         <author>odmendoza</author>
         <link>https://padlet.com/odmendoza/6mjqdlcy7u3awo3u/wish/895143954</link>
         <description><![CDATA[<div>Utiliza la opción <strong>Expandir publicación</strong> para observar de mejor manera el contenido de cada publicación.<br><em>Al pasar el cursor sobre cada publicación aparacerán tres puntitos en la parte superior izquierda, clic y Expandir publicación.</em></div>]]></description>
         <enclosure url="https://images.unsplash.com/photo-1512314889357-e157c22f938d?ixlib=rb-1.2.1&amp;ixid=eyJhcHBfaWQiOjc4MjZ9" />
         <pubDate>2020-11-05 17:58:34 UTC</pubDate>
         <guid>https://padlet.com/odmendoza/6mjqdlcy7u3awo3u/wish/895143954</guid>
      </item>
   </channel>
</rss>
