将Tupel列表转换为列表列表

时间:2019-12-09 16:59:46

标签: haskell

伙计们,我希望能够在列表列表中更改元组列表。这是我的想法:

pairToList :: (a, a) -> [a]
pairToList (x,y) = [x,y]

listoflists :: [(a, a)] -> [[a]]
listoflists xs = [pairToList (a, a) | a <- xs]

第一个功能运行良好,可以将Tupels更改为列表,但是第二个功能不起作用,我试图这样写。

listoflists :: [(a, a)] -> [[a]]
listoflists xs = [pairToList (a, a) | (a,a) <- xs]

我对使用包含元组的列表的理解是新手。

1 个答案:

答案 0 :(得分:4)

第二次尝试,

listoflists xs = [pairToList (a, a) | (a,a) <- xs]

部分(a,a) <- xs是非法的,因为它试图定义变量a的多重时间。例如,如果xs = [(1,2)],则生成器(a,a) <- [(1,2)]会同时将a定义为12,这毫无意义。

您需要使用其他变量,例如(a1,a2) <- xs


第一次尝试,

listoflists xs = [pairToList (a, a) | a <- xs]

a代表从xs中获取的通用对。因此,(a,a)将是一对配对。因此,pairToList (a,a)将产生一个配对列表,这不是您想要的。您可以通过直接调用pairToList a来解决此问题。