Как взять определенное значение из списка кортежей в haskell? - PullRequest
4 голосов
/ 18 октября 2010

У меня есть такая функция:

selectValue1 :: Int -> [(Int,Int)] -> [Int]
selectValue1 a [(x,y)]= [ y |(x,y)<-[(x,y)],x<-(x,y),x==a ]

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

Type error in generator
*** Term           : (x,y)
*** Type           : (Int,Int)
*** Does not match : [a]

, почему это происходит? Как можно выполнить вышеуказанную задачу?Какие-то решения ??Спасибо всем ..:)

1 Ответ

9 голосов
/ 18 октября 2010
selectValue1 a xs = [ y | (x,y) <- xs, x == a ]

Во-первых, в левой части определения не должно быть сопоставления с образцом.Вы просто даете имя своему аргументу - если заглянуть в него, можно сказать, что все может произойти в понимании списка.Во-вторых, x <- (x, y) не имеет смысла.Правая часть стрелки в понимании списка всегда является списком.В этом случае он ничего не делал, поэтому я удалил его. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...