Tracks
/
Common Lisp
Common Lisp
/
Ejercicios
/
La partición numérica de Logan
La partición numérica de Logan

La partición numérica de Logan

Ejercicio de aprendizaje

Introducción

Reducción

La reducción es la aplicación repetida de una función a cada elemento de una secuencia, acumulando de alguna manera los resultados. La función que se aplica toma dos parámetros: el valor acumulado actual y el elemento a procesar. Debe dar como resultado el nuevo valor acumulado.

En Common Lisp, el proceso se hace con la función reduce. En su forma más simple, se ve así:

(reduce #'function-to-apply sequence :initial-value value)

Fíjate que se proporciona un valor inicial: este será el «valor acumulado actual» que se pasa a la función cuando se procesa el primer elemento.

Aquí hay un ejemplo que suma entre sí los números del array, empezando con un valor inicial de 10:

(reduce #'+ '(1 2 3 4) :initial-value 10) ; => 20

Nota que si la secuencia está vacía, la función nunca se llama y la forma evalúa al valor inicial.

Instrucciones

Logan, el alienígena de Lisp, ama los números y también le gusta organizar.

Te pide que le ayudes a escribir una función que reciba un array de números y produzca un par de dos arrays: el primero contiene todos los números impares y el segundo, todos los números pares.

1. Categorizar un número

Primero vas a necesitar crear una función que reciba un par de dos arrays y un número, y que coloque ese número en el array correcto según si es impar o par:

(categorize-number '((1) . (2)) 23) ; => ((23 1) . (2))
(categorize-number '((1) . (2)) 42) ; => ((1) . (42 2))

2. Categorizar muchos números

Ahora, usando la función que acabas de crear, puedes escribir otra función que reciba un array de números y los categorice como lo hiciste arriba:

(partition-numbers '(1 2 3 4))     ; => ((3 1) . (4 2))
(partition-numbers '(42 31 24 13)) ; => ((13 31) . (24 42))
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Common Lisp Exercism

¿Todo listo para empezar La partición numérica de Logan?

Regístrate en Exercism para aprender y dominar Common Lisp con 27 conceptos92 ejercicios y mentoría humana real, todo gratis.