Números pares y mantener

En esta página, construirás otras dos funciones de orden superior que aprendiste en este curso: mantener y combinar.

Queremos un bloque que tome una lista de números como entrada y reporte una lista de solo los números pares de la entrada.

Ya sabes cómo escribir este bloque usando la función de orden superior mantener, pero veamos cómo se ve usando la recursividad:
pares (números){si(¿vacío? (números)){devolver(lista vacía)} sino{si((elemento(1) de (números)) módulo (2)=0){reportar(elemento(1) de (números) delante de (pares (todos menos el primero (números))))} sino{reportar(pares(todos menos el primero (números)))}}}

Aquí hay tres casos posibles a considerar, no solo el caso base habitual o el caso recursivo. Todavía hay un caso base, a saber, una lista de entrada vacía, en cuyo caso informamos una lista vacía. Pero hay doscasos recursivos, dependiendo de si el primer elemento de la lista es par o no. (Tiene que haber un primer elemento, si no estamos en el caso base). Los bloques de Operadores verdes arriba toman el resto al dividir el primer número por 2, y ven si ese resto es 0, en cuyo caso el número es incluso.

Si el primer número es par, entonces queremos incluir ese número en el resultado. Entonces reportamos ese número delante de la llamada recursiva en el resto de los números. Si el primer número no es par, entonces no queremos incluirlo en el resultado, así que simplemente informamos el valor informado por la llamada recursiva.

Al igual que plurales, el código pares es un ejemplo de un patrón de código. No hay nada especial acerca de los números pares aquí. El mismo patrón podría usarse para hacer una lista de números impares, o números que terminen en 7, o nombres que comiencen con Z.

Haz los siguientes ejercicios usando recursividad, no funciones de orden superior.

  1. Intenta modificar el código de evens.
    Escriba un bloque termina en-a que tome una lista de palabras como entrada y reporte una lista de esas palabras de la entrada cuya última letra es a.
    termina en-a(lista{la, lluvia, en, España, es, en, Europa}), reporta {la, lluvia, Europa}
  2. Escribe un bloque números que tome una lista de palabras y números mixtos como entrada y reporte una lista de solo los números de la lista de entrada.
    números(lista{el, 1, después, 909}), reporta {1, 909}
  3. Generaliza el patrón para hacer un bloque mantener.
  4. Escribe el bloque combinar. Nota: El caso base será una lista con un elemento, no una lista vacía.

Crear mapear, mantener y combinar es un gran logro. Sin embargo, cada uno de estos bloques solo generaliza un patrón simple. Algunas personas piensan ni siquiera aprender a usar las funciones de orden superior son en la universidad, ni mucho menos a construirlasn. 🎉 ¡Enhorabuena! 👏 ¡Completaste La belleza y alegría de la Informática (BJC)! 🏆

  1. Haz Unidad 8 Proyecto opcional: Ordenar.
  2. Modifica cualquier algoritmo ordenar que hayas escrito anteriormente en el Proyecto opcioanl para tomar un predicado de comparación como entrada, para que puedas decir
    ordenar(algunos-valores) usando (()>()) para comparar
    para ordenar con el elemento más grande primero.