es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hacer algo solo en índices impares en Haskell?

Estoy empezando a aprender Haskell ahora, pero tengo un caso en el que no puedo encontrar la solución para resolverlo.

Caso:

lista = [4, 9, 2, 4, 2]

Quiero que se convierta en:

lista = [4, 18, 2, 8, 2]

Es como multiplicar 2 solo en los índices impares, ¿podemos hacer esto en Haskell?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, esto se puede hacer en Haskell.

    Un enfoque sería usar zipWith, que aplica una función a cada elemento correspondiente de dos listas, produciendo una nueva lista. Podemos crear una nueva lista del mismo tamaño que la lista original, donde cada elemento es el elemento original o el doble del elemento original, dependiendo de su índice:

    newList = zipWith (\i x -> if odd i then 2 * x else x) [0..] list
    

    Aquí, (\i x -> if odd i then 2 * x else x) es una función anónima que toma dos argumentos, el índice y el elemento, y devuelve el elemento o el doble del elemento, dependiendo del índice. [0..] es una lista infinita de todos los enteros no negativos, que utilizamos para proporcionar el índice para cada elemento de la lista original.

    Luego podemos asignar newList a la lista antigua para obtener el resultado deseado:

    list = newList
    

    Esto actualizará efectivamente la lista antigua con los nuevos valores. El resultado será [4, 18, 2, 8, 2].

Comments are closed.