À l'aide de la carte à remplacer des éléments d'une liste avec (x-y)*(x-y), où y est l'élément initial

J'ai un peu de devoirs à faire et je suis un débutant complet à Haskell. La question que je vais avoir des ennuis avec, est d'écrire une fonction qui, lorsqu'étant donné un entier x et d'une liste d'entiers appliquer (x-y)*(x-y) à chaque élément de la liste et de sortie de la nouvelle liste, avec y à chaque élément de la liste d'entrée.

J'ai une idée très approximative, je vais avoir à utiliser le map fonction, mais je ne suis pas sûr de la manière de procéder.

J'ai été en regardant des exemples pour ajuster chaque élément dans une liste et de comprendre comment cela fonctionne, mais comment je pourrais mettre en œuvre l' (x-y)*(x-y) avec y être l'élément courant complètement me déroute.

squares :: [Int] -> [Int]
squares (x:xs) = x * x : squares xs
squares [] = []

la question exacte que j'ai été ensemble est,

Écrire une fonction rela qui prend comme arguments un entier x et d'une liste d'entiers. Elle renvoie une liste similaire, mais où chaque élément y a été remplacé par (x-y)*(x-y), par exemple

Main> rela 2 [3,5,7]
[1,9,25]

J'ai réussi à le faire fonctionner après la lecture à travers des livres, mais le code que j'ai fait, perd le premier élément dans la liste. Aucune explication pourquoi?

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 ]

OriginalL'auteur blane clorley | 2012-04-14