0
type Point = (Double, Double)
flipsOneY :: Point -> (Int, Int) -> Point
flipsOneY point (i, j) = ((fst point), ((fromIntegral j) - (snd point)))
changeY :: [Point] -> (Int, Int) -> [Point]
changeY xs (i, j) = map flipsOneY xs (i, j)
У меня есть список точек (x, y), где я хочу изменить значение координаты Y. Когда я пытаюсь скомпилировать это, я получаю эту ошибку:Ошибка при использовании 'map' - Haskell
Expr.hs:149:21:
Couldn't match expected type `(Int, Int) -> Point'
with actual type `[(Int, Int) -> Point]'
The function `map' is applied to three arguments,
but its type `(Point -> (Int, Int) -> Point)
-> [Point] -> [(Int, Int) -> Point]'
has only two
In the expression: map flipsOneY xs (i, j)
In an equation for `changeY':
changeY xs (i, j) = map flipsOneY xs (i, j)
Я предполагаю, что неправильно использую карту. Приветствуется любой намек на решение. :-)
Не могли бы вы рассказать о «не оптимальной» части? Я думаю, что пример того, как сделать его более оптимальным, будет очень полезен для @Rewbert. – bheklilr
Это решило мою проблему, и я всегда получаю дополнительные советы, чтобы узнать больше. :) Был бы код мне лучше, если бы я просто изменил порядок аргументов, или есть большие недостатки, чтобы принять во внимание? Я помню, как вы прокомментировали мои темы за последние недели. @bheklilr Спасибо, я многому научился за эти недели. Почти с моим первым курсом функционального программирования :) – Rewbert
@Rewbert Да, если вы изменили порядок аргументов 'flipsOneY', тогда вы могли бы определить' changeY' как 'changeY xs ij = map (flipsOneY ij) xs' или если вы поменялись местами порядок аргументов в 'changeY', вы можете пойти без ограничений с помощью' changeY ij = map (flipsOneY ij) '. – bheklilr