добавление константы в список кортежей - PullRequest
0 голосов
/ 18 октября 2018

Итак, у меня есть список кортежей, и я хотел бы сделать для каждого списка кортежей и добавить константу в список

примерно так

convertingList :: (Int,Int)->[(Int,Int)] -> [(Int,Int)]
convertingList (a,b) list = [(x,y) | (c,d) <- list] where x = a + c   y = b + d

и яполучить ошибку c и d не в объеме, как я могу решить эту проблему?Переменная вне области действия: c :: Int Переменная вне области действия: d :: Int

Есть ли лучшая функция, которую я могу использовать, может быть, с картой?Спасибо за помощь

1 Ответ

0 голосов
/ 18 октября 2018

Ваш where ограничен вне списка понимания.Вне списка понимание c и d действительно не определено.

Но я думаю, что вы делаете эту проблему слишком сложной.Вы можете просто добавить сложение в заголовок списка:

convertingList :: (Int,Int) -> [(Int,Int)] -> [(Int,Int)]
convertingList (a,b) list = [(<b>a + c</b>, <b>b + d</b>) | (c,d) <- list]

или вы можете использовать выражение let:

convertingList :: (Int,Int) -> [(Int,Int)] -> [(Int,Int)]
convertingList (a,b) list = [<b>let</b> x = a+c; y = b+d in (x, y) | (c,d) <- list]

или как @ M.Aroosi говорит, что мы можем переместить let s (без in!) В часть тела понимания списка:

convertingList :: (Int,Int) -> [(Int,Int)] -> [(Int,Int)]
convertingList (a,b) list = [ (x, y) | (c,d) <- list, <b>let</b> x = a+c, <b>let</b> y = b+d]

Альтернативой может быть определение функции отображения, которая добавляетa и b к элементам, например:

convertingList :: (Int,Int) -> [(Int,Int)] -> [(Int,Int)]
convertingList (a,b) = map f
    where f (c, d) = (a+c, b+d)

или (***) :: Arrow a => a b c -> a b' c' -> a (b, b') (c, c'):

import Control.Arrow((***))

convertingList :: (Int,Int) -> [(Int,Int)] -> [(Int,Int)]
convertingList (a,b) = map ((***) (a+) (b+))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...