Как получить только те кортежи, которые я хочу, из списка кортежей? [Haskell] - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь настроить список кортежей из списка целых чисел в этой форме: (a, b) a <- [1..4] и b <- xs. Но я продолжаю получать все различные комбинации заявления. </p>

okTup :: [Int] -> [(Int,Int)]
okTup xs = [(i,j) | i <- [1..4], j <- xs]

Ввод: okTup [3,1,4,2]

Что я получаю, это: [(1,3), (1,1), (1,4), (1,2), (2,3), (2,1), (2,4), (2,2), ( 3,3), (3,1), (3,4), (3,2), (4,3), (4,1), (4,4), (4,2)]

Но я хочу только этого: [(1, 3 ), (2, 1 ), (3, * +1014 * 4 ), (4, 2 )]

1 Ответ

0 голосов
/ 14 января 2019

То есть zip:

okTup xs = zip [1..] xs

Если вы предпочитаете делать это с пониманием списка или хотите расширить существующее понимание, вы можете использовать расширение ParallelListComp, которое позволяет написать:

okTup xs = [(i, j) | i <- [1..] | j <- xs]

(обратите внимание на вертикальную черту | вместо запятой ,.)

Конечно, это, по сути, просто использует zip под капотом.

...