Использование карты для замены элементов списка на (x-y)*(x-y), где y — начальный элемент

I есть немного домашней работы, и я полный новичок в Haskell. Вопрос, с которым у меня возникли проблемы, заключается в том, чтобы написать функцию, которая при задании целого числа xи списка целых чисел применяет (x-y)*(x-y)к каждому элементу в списке и выводит новый список, где yявляется каждым элементом список ввода.

У меня есть очень приблизительное представление о том, что мне придется использовать функцию map, но я не знаю, как это сделать.

Я рассматривал примеры возведения в квадрат каждого элемента в списке и вроде бы понимаю, как это работает, но то, как реализовать (x-y)*(x-y)с y, являющимся текущим элементом, меня полностью сбивает с толку.

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

точный вопрос, который я задал:

Напишите функцию rela, которая принимает в качестве аргументов целое число xи список целых чисел. Он возвращает аналогичный список, но каждый элемент yзаменен на (x-y)*(x-y), например.

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

Мне удалось заставить его работать после прочтения некоторых книг, но код, который я сделал, пропускает первый элемент в списке. Любое объяснение, почему?

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 ]
7
задан nbro 22 February 2017 в 18:41
поделиться