伙计们,我希望能够在列表列表中更改元组列表。这是我的想法:
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]
我对使用包含元组的列表的理解是新手。
答案 0 :(得分:4)
第二次尝试,
listoflists xs = [pairToList (a, a) | (a,a) <- xs]
部分(a,a) <- xs
是非法的,因为它试图定义变量a
的多重时间。例如,如果xs = [(1,2)]
,则生成器(a,a) <- [(1,2)]
会同时将a
定义为1
和2
,这毫无意义。
您需要使用其他变量,例如(a1,a2) <- xs
。
第一次尝试,
listoflists xs = [pairToList (a, a) | a <- xs]
a
代表从xs
中获取的通用对。因此,(a,a)
将是一对配对。因此,pairToList (a,a)
将产生一个配对列表,这不是您想要的。您可以通过直接调用pairToList a
来解决此问题。