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 ]