¿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?
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: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:Esto actualizará efectivamente la lista antigua con los nuevos valores. El resultado será
[4, 18, 2, 8, 2]
.