Tengo un poco de tarea que hacer y soy un novato completo de Haskell. La pregunta con la que estoy teniendo problemas es escribir una función que, cuando se da un número entero x
y una lista de enteros, se aplica (x-y)*(x-y)
a cada elemento en la lista y muestra la nueva lista, siendo y
cada elemento de la lista de entrada.Usando el mapa para reemplazar elementos de una lista con (x-y) * (x-y), donde y es el elemento inicial
Tengo una idea muy aproximada tendré que usar la función map
pero no estoy seguro de cómo hacerlo.
He estado buscando ejemplos para cuadrar cada elemento en una lista y entiendo cómo funciona eso, pero cómo implementaría el (x-y)*(x-y)
con y
siendo el elemento actual me desconcierta por completo.
squares :: [Int] -> [Int]
squares (x:xs) = x * x : squares xs
squares [] = []
la pregunta exacta que se han establecido es,
escribir una función
rela
que toma como argumentos un enterox
y una lista de números enteros. Devuelve una lista similar, pero donde cada elementoy
ha sido reemplazado por(x-y)*(x-y)
, p.Main> rela 2 [3,5,7] [1,9,25]
que han logrado conseguir que funcione después de leer algunos libros, pero el código que han hecho pierde el primer elemento de la lista. ¿Alguna explicación de por qué?
equation1 :: Int -> Int -> Int
equation1 x y = (x-y)*(x-y)
rela :: Int -> [Int] -> [Int]
rela x [] =[]
rela x (y:ys) = [ equation1 x y | y <- ys ]
Gracias por responder tan rápidamente, pero después de unos pocos intentos, y aún estoy perplejo. estoy en el camino correcto al usar esto? rela :: (a -> [b]) -> [a] -> [b] fxy = (xy) * (xy) –
@blaneclorley: Lo que quieres hacer es escribir una función 'map', que obtiene una función 'f :: a → b' como un parámetro y la aplica a todos los elementos de la lista, de modo que' map f [x₀, x₁, x₂, x₃ .. ≡] f≡ [f x₀, f x₁, f x₂ , f x₃ ..] '. Luego, simplemente crea una función parcialmente aplicada (ver arriba) y llama a 'map' con ella. La firma de tipo de 'rela' corresponde a' concatMap' y eso no es realmente lo que necesita en este caso. – Vitus
Todavía perdido, si estoy siendo brutalmente honesto, necesito decirlo en términos simples, solo he hecho un poco de programación y eso fue hace años. Pensé que el mapa estaba predefinido?si tengo que crear mi propia función de mapa, ¿cómo haré que obtenga la función? –